VBA中使用Application.OnTime传递多字符串参数的问题咨询
VBA中用Application.OnTime传递多字符串参数的正确写法
在使用Application.OnTime调用带参数的宏时,核心是要处理好引号的嵌套规则,尤其是传递字符串参数时,稍不注意就会出错。
你的测试代码
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
正确写法解析
Application.OnTime的第二个参数需要是一个字符串形式的宏调用指令,规则如下:
- 整个宏调用要包裹在一对单引号
'里(如果宏不在当前激活工作簿,还要加上工作簿名,比如'[工作簿名.xlsm]宏2 参数1, 参数2') - 如果传递的是字符串参数,每个参数需要用双引号
"包裹;而在VBA字符串中,双引号需要用两个双引号""来转义 - 参数之间用逗号分隔,逗号前后可加空格(不影响识别)
修正后的代码
Sub 宏1() Dim S As String, K As String S = "字符串1" K = "字符串2" ' 正确写法:外层单引号包裹宏调用,字符串参数用双引号转义 Application.OnTime Now, "'宏2 """ & S & """, """ & K & """'" End Sub Sub 宏2(Optional ByVal A As String, Optional ByVal B As String) Debug.Print A, B Stop End Sub
如果参数是数字但需要按字符串传递,写法完全一致:
Sub 宏1() Dim S As String, K As String S = "1" K = "2" Application.OnTime Now, "'宏2 """ & S & """, """ & K & """'" End Sub
常见错误原因
你之前的尝试大多是引号嵌套逻辑错误:
- 未给字符串参数加双引号,导致VBA将参数识别为变量而非字符串
- 双引号转义方式错误,导致整个宏调用字符串语法失效
- 遗漏外层单引号,
Application.OnTime无法正确区分宏名与参数
内容的提问来源于stack exchange,提问作者my if
相关产品推荐
相关产品推荐

