我有一个主宏 (macro1) 在其他 *.xlam 或 *.xslm 文件中运行较小的宏 (macroA 和 macroB)。
除了小宏 (A+B) 执行其工作外,我还需要“外部”宏 (macro1) 中的特定变量及其值,以便在其代码中进一步使用。
有没有办法将宏 A+B 中的变量值传递给宏 1?
背景:
我知道声明 Public Variable
可以在不同的宏中使用。我也知道如何将变量或它们的值从一个宏传递给下一个宏。但是(在下面给出我的示例)我怎样才能将变量“返回”给宏 1?
示例(1)在 Subs
之间传递变量不调用其他工作簿/文件(工作):
Public wbA as Workbook
Public wbB as Workbook
Sub MySubRoutine()
Set wbA = Workbooks.Open("C:\file.xlsx")
Set wbB = Workbooks.Open("C:\file2.xlsx")
OtherSubRoutine
End Sub
Sub OtherSubRoutine()
Debug.Print wbA.Name
End Sub
OUTPUT: file.xlsx
示例(2)从调用
Sub
传递变量从其他工作簿/文件到另一个(非工作):Public count As Integer
Sub macro1()
Run file.xlam! & macroB, argument1, argument2
Debug.Print count 'second print
End Sub
Sub macroB(argument1, argument2)
'code that does something
count = 5
Debug.Print count 'first print
End Sub
OUTPUT first print: 5
OUTPUT second print: 0
代码在没有错误或调试消息的情况下完成。我的错误在哪里?
最佳答案
您应该转换 Sub
在一个函数中(能够返回一些东西)并以不同的方式调用它:
Function GiveMeFive(x As Long, y As Long) As Long
Debug.Print x + y 'not important, ONLY TO SEE IT WORKING IN immediate Window
GiveMeFive = 5
End Function
Sub testFunctionWithArgsOtherWb()
Dim x As Long
x = Run("PERSONAL.XLSB!" & "GiveMeFive", 4, 3)
Debug.Print x
End Sub
它将在即时窗口中返回:7(来自函数本身)和 5,函数在被调用时返回的内容......第二版 :
如果你不喜欢函数,可以返回
Public
使用 Sub
的变量值, 这样:Public
另一个工作簿中的变量(也使用 Personal.xlsb),但 在 ThisWorkbook 代码模块中 : Public MyVar As Long
Sub
在标准模块中:Sub MyMacro(x As Long, y As Long)
ThisWorkbook.MyVar = x * y
End Sub
Sub
从不同的工作簿读取全局变量,由被调用的 Sub
修改: Sub testValFromOtherWB()
Dim x As Long
Run "PERSONAL.XLSB!" & "MyMacro", 4, 3
x = Workbooks("PERSONAL.XLSB").MyVar
Debug.Print x
End Sub
请测试它们并发送一些反馈。
关于excel - 通过调用/运行其他工作簿/文件从嵌套宏中获取变量到 "outer"宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68771199/