gpt4 book ai didi

excel - 如何从一个 Excel 工作簿调用另一个 Excel 工作簿中特定于工作表的宏?

转载 作者:行者123 更新时间:2023-12-01 22:14:55 26 4
gpt4 key购买 nike

我正在尝试调用另一个工作簿中的 Excel 宏。它是一个特定于工作表的宏,但 Microsoft 文档和网上研究给出的语法仅提供了一种仅通过工作簿访问宏的方法。该语法是:

Application.Run ("testworkbook.xls!macroname")

我需要做的是在那里还有一个工作表引用,例如:

Application.Run ("testworkbook.xls!Sheet1.macroname")

我已经尝试过这个和许多其他变体,包括其中有单引号或双引号,但我总是收到无法找到宏的消息。

编辑:通过所有线索和大量测试,我找到了答案。您可以访问特定于工作表的子项,但必须使用规范名称,例如“Sheet1”,不能使用实际的工作表名称。显然其他工作簿无法访问该信息。

因此,只要您不尝试使用工作表名称(并且您可能必须单引号工作簿名称(通过将 CHR(39) 连接到任一端),上面的格式就可以工作。

最佳答案

我知道你可能已经明白了这一点,可能是在经历了多次撕头发和喝咖啡之后,但我想:

  • 请详细说明原因
  • 为您提供一种可以使用的方式你的工作表的名称来获取你想要的想要。

首先,您想要的工作表名称与代码模块名称不同。因此,在您的 VBE 中,您会看到代码模块的名称是“Sheet1”,但如果 Name 可能有不同的属性,这是不同的,例如,“MySheet1”(或者也可能是相同的)。

为了按名称获取它,您必须执行一些循环,更改安全设置等。如果这就是您所追求的(由于安全设置问题,这在较小的环境中效果很好),在这里您可以以go为例:

  1. 将您的安全设置更改为信任对 VBA 的编程访问项目。在 Excel 2007 中,转到 Orb | Excel 选项 |信任中心|信任中心设置|宏设置然后启用“信任访问 VBA 项目模型”
  2. 创建一个工作簿工作表。将其重命名为“MySheet1”。打开 VBE (Alt+F11) 并在“Sheet1 (MySheet1)”创建子表例程,将其称为 TimesTen 并在代码只是放入 Debug.Print 10 *
    10.
    .像这样:

    Sub TimesTen()
    Debug.Print 10 * 10
    End Sub
  3. 将文件另存为启用宏的文件文档并调用它“MacroXSLX.xlsm”。将其保持打开状态。

  4. 打开一个新的 Excel 文档,导航到它的 VBE 并在一个新的宏中在任何地方,创建一个名为测试。在该代码的正文中,把这个:.

    Sub test()
    Dim SheetName As String
    SheetName = "MySheet1"
    Dim wb As Workbook
    Set wb = Workbooks("MacroXSLX.xlsm")
    For Each VBComp In wb.VBProject.VBComponents
    If VBComp.Properties.Item("Name").Value = SheetName Then
    Application.Run (wb.Name & "!" & VBComp.Name & ".TimesTen")
    End If
    Next
    End Sub
  5. 按 F5 运行测试,然后您立即应该看到 100窗口。

您可以在#4 中看到,我正在循环遍历所有组件(模块、类等),寻找具有值为 Name 属性的组件MySheet1。一旦我有了这个,我就可以获取该组件的名称,在本例中为 Sheet1 并使用它来构造我的字符串,该字符串将在 MacroXSLX.xlsm 中运行工作表的宏嗯>。当您找到所需内容等时,可以进一步清理代码以退出 For 语句。

如上所述,唯一真正的缺点是安全设置部分并确保您能够以编程方式访问 VBAProject - 在一到十台计算机上没问题,但如果您必须确保更多,则可能会很麻烦始终设置正确。

关于excel - 如何从一个 Excel 工作簿调用另一个 Excel 工作簿中特定于工作表的宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2282925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com