【问题标题】:VBA Excel 2003 Macro independent from specific WorkbookVBA Excel 2003 宏独立于特定工作簿
【发布时间】:2015-09-11 12:57:19
【问题描述】:

好的,所以我编写了一个宏,当从我编码的工作簿启动时,它运行良好。但是,我需要宏能够跨各种工作簿工作。

我已将宏移动到隐藏的“个人”工作簿,但是,现在当代码引用“ThisWorkBook”时,嗯,是的,它指向个人工作簿。

我曾想过只创建一个工作簿变量并指向工作簿的地址/名称......但这会有所不同(工作簿是由系统生成的,工作簿的名称取决于时间/日期生成)。

作为参考,我想在 Excel 的工具栏上放一个按钮,当用户单击它时,它会运行这个宏。是否有一种方法可以获取调用宏的工作簿的名称?

谢谢, 山姆。

【问题讨论】:

  • 嗨,所以现在你有 2 个工作簿,一个是隐藏的,带有宏(我们将其命名为 A),另一个是可见的,我们将其命名为 B。所以你想从B中的A?
  • 嘿拉里,就是这样。为您提供更多背景知识:我们有一个系统可以输出一个包含数据的电子表格 (A),以及另一个包含一系列公式的电子表格 (B)。目前,用户必须通过 A,复制正确的字段,然后将它们粘贴到 B。我编写了一个自动执行此过程的宏,所以他们现在打开 A,点击快捷方式,宏定位并打开B,然后在A中找到相关数据并粘贴到B。
  • 抱歉还是有点不清楚情况和你想要什么,我们可以在chat.stackoverflow.com/rooms/info/21244/…继续讨论吗?
  • 不幸的是,这个宏目前与工作簿 A 相关联......但是每周都有一个新的 A,我需要宏独立于 A。我通过移动宏来做到这一点到个人工作簿(工作簿 C)。问题是我不知道如何让宏与 A 一起工作,尽管它存储在 C 中。我不能简单地创建一个带有 A 文件路径的 Workbook 变量,因为它每次都可能不同。但是,用户在 A 中启动宏正在调用宏。有没有办法获取启动宏的工作簿的文件名?

标签: excel vba


【解决方案1】:

Active 命令可让您引用从中调用代码的工作簿和工作表。

ActiveCell
ActiveChart
ActiveEncryptionSession
ActivePrinter
ActiveProtectedViewWindow
ActiveSheet
ActiveWindow
ActiveWorkbook

Application 对象的所有属性

【讨论】:

    【解决方案2】:

    如果工作簿 A(数据工作簿)中有命名约定,您可以进行以下更改 识别工作簿 A

    Dim wbA As Workbook 'workbook A ( the data workbook) 
    Dim wb As Workbook 
    
    For Each wb In Workbooks 'loop through all opened workbooks, matching the name 
        If InStr(wb.Name, "ABC") > 0 Then 
            Set wbA = wb
            Exit For
        End If
    Next wb
    

    然后用 wbA 替换“ThisWorkBook”

    【讨论】:

      【解决方案3】:

      您也可以使用 VBS 代替宏。语言几乎相同,您的脚本将独立于您的工作簿。

      至于确定使用哪个文件来运行宏(没有数据和代码示例,很难说得太具体),您可以浏览找到所需的文件。

      Dim objShell
      Set objShell = CreateObject("Shell.Application")
      
      Dim strFileName
      Dim strFilePath
      
      Dim dPicker
      Set dPicker = objShell.BrowseForFolder(0, "Choose a file:", &H4000)
      
      strFilePath = dPicker.self.Path 'will give you the file path of the file you choose,
                                      'which you can then use to open/access the file with
                                      'the data you need.
      
      'Code
      
      Set dPicker = Nothing
      

      如果您想坚持使用宏,您可以查看 FileDialog 对象以在 VBA 中使用文件选择器。

      要在 VBA 中获取打开的工作簿的文件名和/或路径,请使用

       ActiveWorkbook.Name
       ActiveWorkbook.Path
      

      希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        只需将“ThisWorkbook”替换为“ActiveWorkbook”即可。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多