我对单引号的使用不是很熟悉,看来我不会用()传递来绑定Workbook。我想传递至少两个字符参数
Sub 宏1()
S = 1
K = 2
Application.OnTime Now, "'宏2 (" & S & ")'": Exit Sub
'Application.OnTime Now, "'宏2 ("" & S & ""','"" & K & "")'": Exit Sub
'Application.OnTime Now, "'宏2 ("" & S & "","" & K & "")'": Exit Sub
'Application.OnTime Now, "'宏2 ("" & S & ""','"" & K & "")'": Exit Sub
'Application.OnTime Now, "'宏2 ('"" & S & ""','"" & K & ""')'": Exit Sub
'Application.OnTime Now, "'宏2 (" & S & "," & K & ")'": Exit Sub
'Application.OnTime Now, "宏2 ("" & S & ""','"" & K & "")": Exit Sub
'Application.OnTime Now, "宏2 (" & S & "','" & K & ")": Exit Sub
End Sub
Sub 宏2(Optional ByVal A As String, Optional ByVal B As String)
Debug.Print A, B
Stop
End Sub
您需要了解的第一件事是在 VBA 中定期调用 Sub 是如何工作的。 (请注意,我将您的子例程重命名为
S2
)
您可以使用
S2 s, k
或者
Call S2(s, k)
如果您使用以下语法:
S2 (s)
s 两边的括号与子程序的调用无关。它们强制 VBA“评估”括号中的值并创建该值的副本。结果就是
S2 (s, k)
抛出语法错误,因为 VBA 无法计算像
(s, k)
这样的术语
现在回到
Application.OnTime
。调用需要将变量名称替换为其实际值,并用引号字符括起来
S2 "1", "2"
这可以用
创建"s2 """ & s & """,""" & k & """"
这看起来很混乱:如果你想将引号字符放入字符串中,你需要将其加倍。如果您使用以下语法,它可能会变得更加明显:
Const quote = """" ' Now quote contains a string with a single quote
"s2 " & quote & s & quote & "," & quote & k & quote
现在最后一步是,当您在
Application.OnTime
中使用它时,需要将整个表达式放入单引号中
Application.OnTime Now, "'s2 " & quote & s & quote & ", " & quote & k & quote & "'"