【问题标题】:Is there any way to launch a live VBA command line in Excel?有什么方法可以在 Excel 中启动实时 VBA 命令行?
【发布时间】:2021-09-13 09:14:19
【问题描述】:

目前要在 Excel 中编写和编辑 VBA 宏,我按下“宏”菜单按钮,输入宏的名称,然后将其写入所有宏代码所在的编辑器窗口中。我可以用“运行”按钮运行它。

是否有可能获得一个实时 VBA “shell”,类似于一个窗口或命令提示符,您只需在其中一次输入 VBA 代码行,立即注意到每一行的效果,就像在实时编码中一样Python 外壳?

【问题讨论】:

  • 您可以使用 vb 编辑器中的即时窗口。
  • 谢谢。我在 Excel 中找不到此窗口。 Microsoft 文档说它可以在“查看”菜单中或按 CTRL-G 找到。 CTRL-G 为我打开了一个“转到单元格”窗口,而我在“视图”菜单中看不到“立即”窗口。你知道这是为什么吗?谢谢
  • 您应该按Ctrl + G在 VBE(Visual Basic 编辑器)中Alt + F11...
  • 知道了;非常感谢。
  • 我尝试了“Dim source As Workbook”并收到“Compile Error: Invalid in Immediate Pane”。您知道为什么变量类型声明在即时窗格中无效吗?

标签: excel vba


【解决方案1】:

cmets 中已经给出了答案:使用即时窗口。它是 VBE 环境的一部分,而不是 Excel(或 Word 或任何其他使用 VBA 的环境)的一部分。要显示它,请使用 View->Immediate Window,或快捷键 Ctrl+ G

您可以在即时窗口中执行的操作:

(1) 执行任何 VBA 语句:

  • 调用子程序或函数:MyMacro 1, 2
  • 更改变量的内容:i = 123
  • 修改底层应用程序中的某些内容:ActiveCell.Interior.Color = vbRed

您可以执行任何可执行的语句。像 DimOption 这样的语句是不可执行的。尝试为语句设置断点:如果不能,则该语句不可执行(不是 100% 正确:您可以在 Sub-statement 处设置断点但无法在即时窗口中创建 Sub) .

(2) 显示简单数据类型(数字、字符串、日期...)的值。前面有一个问号:

  • ? "Hello World"
  • ? i
  • ? MyFunction(3)

如果您希望代码向直接窗口写入内容,请使用语句Debug.Print


你需要了解的是语句运行的上下文

如果您的代码处于中断模式(宏正在运行并且遇到断点、断言语句或发生运行时错误并且您按下“调试”按钮时),上下文是实际宏的上下文。如果宏声明了一个变量,则立即窗口访问该变量。如果模块使用全局变量,即时窗口也可以访问它们。

但是,如果当前没有宏正在运行(并且被中断),则即时窗口将使用它自己的上下文。您可以在此上下文中通过简单地为其分配一个值来创建变量,例如meaningOfLife = 42Set ws = ActiveSheet,它们被创建为Variant。基本上,把上下文想象成你有一个没有Option Explicit 的空白模块。请注意,这些变量不适用于您的任何其他宏。

我的经验是,如果你想执行更多的语句,创建一个小的测试子例程会更容易——如果你想让它干净,你可以为此创建一个自己的模块。然后,您可以从即时窗口调用此测试子例程。

【讨论】:

  • 谢谢。我会更深入地研究这个答案。现在我发现即时窗口允许您输入一些代码并执行它。但它不太像 Python 的 live shell。因为您输入的相同命令在执行后仍然存在。在某种程度上,它仍然只是一个预先编写脚本或函数并执行它们的地方,只是比普通的宏编辑器窗口快一点。我很好奇,这是唯一的选择,还是有其他选择更像是一个活壳?我想如果我之后删除每个命令,它就会像一个 shell,因为你说上下文仍然存在。
  • 我不会将 I.W. 与 Python shell 或浏览器控制台进行比较。有一些相似之处,但有些东西是不同的。不,你不会在 I.W. 中编写脚本,你只是执行一个命令。然后也许是下一个。您可以通过将光标置于该行并按 Enter 来重复命令。无需从 I.W. 中删除任何内容,除非出于光学原因。
  • 仅供参考,即时窗口甚至允许在由: 分隔的单行代码中编写循环代码 - 例如。 For i = 1 to 5:? i;:Next@FunThomas
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 2015-10-15
  • 2021-12-09
相关资源
最近更新 更多