我想传两个参数,但是用括号()的时候就不行了

问题描述 投票:0回答:1

我对单引号的使用不是很熟悉,看来我不会用()传递来绑定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
excel vba
1个回答
0
投票

您需要了解的第一件事是在 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 & "'"
© www.soinside.com 2019 - 2024. All rights reserved.