excel - 通过调用/运行其他工作簿/文件从嵌套宏中获取变量到 "outer"宏

标签 excel vba

我有一个主宏 (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在一个函数中(能够返回一些东西)并以不同的方式调用它:

  • 将下一个函数放在工作簿 1 中(例如,我使用了 'PERSONAL.XLSB'):
  • 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/

    相关文章:

    excel - 在 PowerQuery/M 中插入带有值列表的新列

    python - 将数据传输到 excel 时如何处理 "old"日期

    excel - 不同subs中全局变量和局部变量的使用

    vba - 查找并选择多行

    vba - 使用单元格中的文本值查找包含公式的单元格的地址

    excel - Excel VBA中的公共(public)静态变量

    按下按钮时 VBA 事件抛出错误?

    Excel 2010 VBA 给定列索引的列长度

    html - 网页导航 点击下一页

    javascript - HTML 表格到 Excel Javascript