首页 > 解决方案 > 当我将此代码放入循环时,如何管理双引号?

问题描述

在 SO 上,我只得到了两个答案,它们在一次调用时都有效。现在我想把它们放在一个循环中并循环几行数据。但是,我有很多时间让代码正确。我怀疑这与我如何处理双引号有关。

独立代码行如下。

  1. Var = ActiveSheet.Evaluate("And(A1:F1)")
  2. Var = Application.WorksheetFunction.And(Range("A1:F1"))

对于我尝试的第一个示例:

for i = 2 to 20
     Var = ActiveSheet.Evaluate("And(A & i & :F & i)")
Next i 

这会产生“错误 2015”

第二个:

for i = 2 to 20
     Var = Application.WorksheetFunction.And(Range("A" & i & ":F" & i))
Next i

这会产生一行红色代码

我究竟做错了什么?

标签: excelvba

解决方案


Visual Basic 编辑器使这变得比它应该的更难,因为它的默认语法突出显示使字符串文字与标识符具有相同的颜色:

默认语法突出显示使标识符和字符串文字都变黑

您可以在工具/选项下更改它,并将标识符文本设置为不同的颜色 - 这里是青色:

VBE 语法高亮选项

现在字符串文字仍然是黑色的,但现在标识符在视觉上看起来很独特:

字符串文字现在显然不是标识符

您要确保的是,您的变量像标识符一样是语法高亮的 - 所以它们是蓝绿色的,而不是黑色的 - 就像在您的第二个示例中一样:

变量 i 显然不是字符串文字

与您的第一次尝试相比,其中i没有将语法高亮显示为应为的标识符:

整个字符串都是黑色的

并且由于您知道i是一个 VBA 变量,并且您希望VBA 将其值连接到该字符串中,因此i作为任何其他字符串文字(而不是作为标识符)被语法高亮显示是您的视觉提示,有些东西已经关闭了!

@JNevill 的固定版本相比

i 现在被视为标识符

由于标识符文本在编辑器中具有与字符串文字不同的语法突出显示,因此可以更轻松地快速定位意外出现在字符串文字中的变量。

第一个片段不起作用,因为ActiveSheet.Evaluate它接受了它的参数并将其提供给 Excel 的表达式评估引擎,......它不知道如何处理 this i。变量i只存在于 VBA 代码的执行上下文中:只有 VBA 代码可以评估它的值。


推荐阅读