Excel VBA 可以在不同的宏工作簿中调用宏吗

Excel VBA 可以在不同的宏工作簿中调用宏吗

Excel 电子表格中的 VBA 代码可以调用不同 XLSM 工作簿文件的宏吗?

我有一个本地 XLSM,需要调用不同 XLSM 文件中的方法,该怎么做?

答案1

打开文件工作簿,如果已打开则关闭

codeWorkBookPath = "Directory\"
codeWorkBookName = "file.xlsm"
codeWorkBookFullPathName = UCase(Trim(codeWorkBookPath)) &         
UCase(Trim(codeWorkBookName))
codeWorkbookAlreadyOpen = CommonWorkbook.isWbOpen(codeWorkBookName)
If Not codeWorkbookAlreadyOpen Then
 Workbooks.Open Filename:=codeWorkBookFullPathName, UpdateLinks:=False, 
 ReadOnly:=True
End If

激活起始电子表格

Workbooks(startWorkBook).Activate
Sheets(startWorkSheet).Activate

运行宏名称

argString = "'" & Trim(codeWorkBookName) & "'!" & Trim(macroName)
APPLICATION.Run argString

答案2

您必须使用工作表的 CODENAME,而不是名称。

在我分享的图片中,你应该使用“Sheet1”,而不是“testSheet”

点击查看

答案3

选项1:

如果源工作簿和目标工作簿都打开,那么您可以使用以下任一项。

您可以动态地将工作簿和宏名称分配给变量,然后您需要编写此代码。

Application.Run ("'" & workbookname & "'!macroname")

注意: 其中workbookname变量包含File Path, Workbook & Sheet Namemacroname包含Macro's Name

以下是简单的命令:

Application.Run ("'Test7A.xlsm'!Sheet1.Rangetest")

选项 2:

如果源工作簿已关闭,则需要使用此方法。

Sub myMacro()
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks("Test7A.xlsm")
    On Error GoTo 0
    If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\Test7A.xlsm")
    Run "Test7A.xlsm!Sheet1.RangeTest"
    wb.Close False
    Set wb = Nothing
End Sub

Test7A.xlsm工作簿名称是Sheet1工作表名称,并且RangeTest是您调用的宏。

相关内容