调用sub并在VBA中传递参数

时间:2013-08-08 09:12:46

标签: excel vba controls

我正在尝试调用sub(OnAction)并从工具栏控件传递参数,但我似乎无法调用它,因为我一直在“无法运行宏。宏可能无法使用”。

控件位于工作簿中,而功能位于模块中。

Option Explicit

Sub somefunction(Optional ServerType As String) End Sub

以下是Control的代码:

With ToolsMenuControl

    .Caption = "some caption"
    .OnAction = "'" & ThisWorkbook.Name & "'!someFunction ""Wintel""'"
    .Tag = C_TAG

End With

请建议。

2 个答案:

答案 0 :(得分:1)

似乎正确.OnAction property分配取决于文件是否已保存。因此,可能的语法如下所示:

    If ThisWorkbook.Saved Then
        'when your file is saved
        .OnAction = "'" & ThisWorkbook.Name & "'!'somefunction ""Saved""'"
    Else
        'when file is not saved
        .OnAction = ThisWorkbook.Name & "!'somefunction ""Not Saved""'"
    End If

答案 1 :(得分:0)

  1. Excel使用Path!Reference来引用单元格或宏。 Path可以是FileName或FullPath,(和SheetName用于单元格引用)。引用可以引用单元格地址,或带参数的宏。
  2. 对于Path和Reference,如果它包含特殊字符,则将其括在撇号(')中。
    • 路径,例如:Book1.xlsx'C:\Users\Me\My Book.xlsx'。 @KazJaw,文件命名和路径将在引用unSaved / Open / Closed文件时显示差异。
    • 参考文献,例如:mySub'someFunction "Wintel" '。剩余可用空间的额外空间,由解释器截断。
  3. VB中的字符串用引号(“”)括起来。在字符串中嵌入引号/撇号的推荐方法是在所使用的引号上加倍。例如
    • 使用'He''s good'代表He's good
    • "Am ""I"" fine?"转换为Am "I" fine?
  4. 用VB编写.OnAction = "'" & ThisWorkbook.Name & "'!'someFunction ""Wintel"" ' "