![Excel VBA 可以在不同的宏工作簿中调用宏吗](https://linux22.com/image/1567917/Excel%20VBA%20%E5%8F%AF%E4%BB%A5%E5%9C%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E5%AE%8F%E5%B7%A5%E4%BD%9C%E7%B0%BF%E4%B8%AD%E8%B0%83%E7%94%A8%E5%AE%8F%E5%90%97.png)
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
答案3
选项1:
如果源工作簿和目标工作簿都打开,那么您可以使用以下任一项。
您可以动态地将工作簿和宏名称分配给变量,然后您需要编写此代码。
Application.Run ("'" & workbookname & "'!macroname")
注意: 其中workbookname
变量包含File Path, Workbook & Sheet Name
&macroname
包含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
是您调用的宏。