【问题标题】:Execute With...End With Statement in Immediate window, Excel VBA在立即窗口中执行...结束语句,Excel VBA
【发布时间】:2019-08-22 13:43:04
【问题描述】:

我正在尝试在即时窗口中执行 With...End With 语句,

但我没有让它工作。

所以我的问题是如何在即时窗口中执行与 With...End With 语句相关的多行代码?

我试图在即时窗口中执行的代码:

With Date_Per_Month.Range("A2:H32")
.Offset(1).Resize(.rows.Count - 1, .Columns.Count - 1).select
end with

当然,在即时窗口中编写这样一行代码是可行的(但这并不能回答问题)。:

Date_Per_Month.Range("A2:H32").Offset(1).Resize _(Date_Per_Month.Range("A2:H32").Rows.Count-1,Date_Per_Month.Range("A2:H32").Columns.Count-1).Select

尝试在行尾用“:”连接每个代码行,但没有成功。

非常感谢任何帮助。

【问题讨论】:

  • 简而言之,正如您所发现的,您不能。即时窗口用于单行快速检查,而不是代码。如果你想要代码把它放在模块中并运行它。
  • 好的,我明白了。感谢斯科特的回答!

标签: excel vba debugging immediate-window


【解决方案1】:

即时工具窗口本质上是一个控制台。您可以使用它在没有执行上下文的情况下评估表达式,或者在当前过程的上下文中以中断模式计算。

每个“行”可以是[几乎]任何可执行指令,但是

你可以赋值给一个不存在的变量...

foo = 42

...然后此标识符存在于“立即”上下文中,您可以在后续语句中使用它:

?TypeName(foo)
Integer

...直到您明确重置该上下文:

End
?TypeName(foo)
Empty

但是你不能声明一个变量:

Dim foo

With 语句很特别:它包含一个对象引用,但在语法上它是一个需要以 End With 标记终止的 block 语句:如果您尝试键入 With Sheet1在即时窗格中,您将收到一个编译错误,提示缺少 End With - 再次说明,因为即时窗格中的每个语句都是独立指令。

我们可以尝试内联它:

With Sheet1 : .Cells(1, 1).Value = 42 : End With

然后我们得到一个奇怪的“invalid watch expression”错误:

不管是什么原因,就像用Dim 语句声明变量一样,在即时窗格的上下文中定义With 变量是没有意义的,其中下一条要运行的指令是你碰巧碰到的任何指令 ENTER on:没有范围,没有操作序列 - 一条指令运行立即,仅此而已:无论立即窗格的内容是什么,没有其他指令将一直运行,直到您按 ENTER 为止。

如何在即时窗口中执行多行代码[...]?

答案是,您不需要 - 因为即时工具窗口没有“代码行”的概念。

【讨论】:

  • Mathieu,感谢您的详细解释和全面的回答。对工具的工作原理及其用途有更深入的了解总是好的。
  • 我发现这会导致 Excel 崩溃:a.) 创建一个 sub,b.) 输入“Set foo = new collection”(或可能是任何对象),c.) 开始调试它,d.) 执行在即时窗口中“设置 foo = nothing”。不确定这是否与此处描述的概念有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多