excel - 如何避免在错误的工作簿中执行 VBA 函数

标签 excel vba

我有几个执行计时器和宏的 excel 文件。但一个大问题是当工作簿 A 的宏被调用时,工作簿 B 处于事件状态。宏在错误的书中执行并失败。

  • 我需要将 windows().active 放在每个函数的开头吗?
  • 如果我有不同的模块,如何将此工作簿名称传递给所有模块?
  • 这似乎过分而且不对。这个问题有什么好的解决办法吗?

  • 期待您的回答

    最佳答案

    你在正确的轨道上

    2.If I have different modules how do I pass this workbook name to all of them



    我假设您的宏正在使用 ActiveWorkbook属性,或仅使用工作表属性,如 Range没有资格他们?

    而不是使用 ActiveWorkbook使用 ThisWorkbook .而不是使用 Range使用 ThisWoorkbook.Worksheets(1).Range等等。否则,宏将假定事件工作表是您想要的。
    Sub MyMacro
      Range("A1").Text = "Test"
    End Sub
    

    尝试
    Sub MyMacro(ByVal oWorksheet as Worksheet)
      oWorksheet.Range("A1").Text = "Test"
    End Sub
    

    然后将工作表对象作为参数传递。

    您还可以找到 ThisWorkbook有用的对象 - 它是宏所在的工作簿,或 Application.Caller对象,它是调用当前宏的对象,例如 Range 对象(如果它是单元格公式),或者可能是您的情况下的计时器对象。

    关于excel - 如何避免在错误的工作簿中执行 VBA 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5260005/

    相关文章:

    html - 如何使用 ie vba web-scrape 脚本选择 <li>

    python:pandas - 如何将 pandas 数据帧的前两行合并到数据帧标题?

    excel - 经过天数小时分钟不包括周末和节假日时间

    excel - 如何在将导入 Access 的 Excel 中转换此文本日期?

    vba - VBA 宏 (Excel) 中出现错误“过程太大”

    arrays - 在QTP中创建数组

    vba - 无法使用 ADO 从 CSV 读取数据,因为驱动程序认为我正在使用整数/数字并显示空值而不是文本

    excel - 来自工作表列的 VBA 多列列表框

    excel - 如何使用 VBA 获取当前年份

    excel - 在 VBA 中不使用 for 循环而将每行加 1