调用名称在单元格文本中的宏
Call a macro which name is in the text of a cell
请您帮忙解决以下问题:
- 我需要调用一个名称可变的宏,它位于 Workbook1 的 Sheet1 的单元格 C5 中。
- 我需要 运行 另一个工作簿中的那个宏,比方说 Workbook2。
目前我(在 Workbook1 中)的代码是:
Public Sub RS()
'Setting source worksheet and workbook where the macros are saved
Dim ws1 As Worksheet
Dim wb1 As Workbook
Set wb1 = ActiveWorkbook
Set ws1 = ActiveWorkbook.ActiveSheet
'Defining the cell that contains the name of the chosen macro to be run
Dim Macro1 As String
Macro1 = Range("C5").Value
'Selecting target workbook
Workbooks("Workbook2").Activate
ActiveSheet.Select
Dim ws2 As Worksheet
Dim wb2 As Workbook
Set wb2 = ActiveWorkbook
Set ws2 = ActiveWorkbook.ActiveSheet
'Running in Workbook2, the macro selected in workbook1
Call Macro1
End Sub
问题是Macro1
没有被识别。我也一直在尝试使用 CallByName
函数和 Application.Run Macro1
,但也没有成功。请告诉我我遗漏了什么或我应该修改什么。
要从另一个工作簿调用宏,您需要在 Application.Run Method's
第一个参数中包含该工作簿的名称。尝试:
Application.Run "WBNameThatContainsTheMacro.xlsm!" & Range("C5").Value
如果该工作簿中有多个模块,您也可以明确表示:
Application.Run "WBNameThatContainsTheMacro.xlsm!" & "Module1." & Range("C5").Value
其中 Module1
是模块的名称。注意分隔模块名称和宏名称的点。这是你正在尝试的吗? HTH.
替换行
Call Macro1
有了这个:
Application.Run "'" & wb2.Name & "'!VBAProject." & ws2.CodeName & "." & Macro1
您的代码暗示 "Macro1" 在 ws2 的代码模块中。如果它位于工作簿的另一个模块中 "wb2",则将上面的 "ws2.CodeName" 替换为该模块的代号。
根据 Flavinho 的信息进行第二次更新。代码行变为:
'Application.Run "Workbook1.xlsm!VBAProject.Module3.ts1"
Application.Run "Workbook1.xlsm!VBAProject.Module3." & ts1
请您帮忙解决以下问题:
- 我需要调用一个名称可变的宏,它位于 Workbook1 的 Sheet1 的单元格 C5 中。
- 我需要 运行 另一个工作簿中的那个宏,比方说 Workbook2。
目前我(在 Workbook1 中)的代码是:
Public Sub RS()
'Setting source worksheet and workbook where the macros are saved
Dim ws1 As Worksheet
Dim wb1 As Workbook
Set wb1 = ActiveWorkbook
Set ws1 = ActiveWorkbook.ActiveSheet
'Defining the cell that contains the name of the chosen macro to be run
Dim Macro1 As String
Macro1 = Range("C5").Value
'Selecting target workbook
Workbooks("Workbook2").Activate
ActiveSheet.Select
Dim ws2 As Worksheet
Dim wb2 As Workbook
Set wb2 = ActiveWorkbook
Set ws2 = ActiveWorkbook.ActiveSheet
'Running in Workbook2, the macro selected in workbook1
Call Macro1
End Sub
问题是Macro1
没有被识别。我也一直在尝试使用 CallByName
函数和 Application.Run Macro1
,但也没有成功。请告诉我我遗漏了什么或我应该修改什么。
要从另一个工作簿调用宏,您需要在 Application.Run Method's
第一个参数中包含该工作簿的名称。尝试:
Application.Run "WBNameThatContainsTheMacro.xlsm!" & Range("C5").Value
如果该工作簿中有多个模块,您也可以明确表示:
Application.Run "WBNameThatContainsTheMacro.xlsm!" & "Module1." & Range("C5").Value
其中 Module1
是模块的名称。注意分隔模块名称和宏名称的点。这是你正在尝试的吗? HTH.
替换行
Call Macro1
有了这个:
Application.Run "'" & wb2.Name & "'!VBAProject." & ws2.CodeName & "." & Macro1
您的代码暗示 "Macro1" 在 ws2 的代码模块中。如果它位于工作簿的另一个模块中 "wb2",则将上面的 "ws2.CodeName" 替换为该模块的代号。
根据 Flavinho 的信息进行第二次更新。代码行变为:
'Application.Run "Workbook1.xlsm!VBAProject.Module3.ts1"
Application.Run "Workbook1.xlsm!VBAProject.Module3." & ts1