【问题标题】:Why would a macro from a different workbook be inaccesible after allowing macro's?为什么在允许宏后无法访问来自不同工作簿的宏?
【发布时间】:2016-05-29 22:07:59
【问题描述】:

我有一个 .xlsb 文件,在定义路径变量并取决于其当前位置之后,我正在另一台计算机上运行该文件。我将不同 xlsm 文件的 VBA 项目添加到 .xlsb。我正在尝试使用以下代码中的以下任一行从 .xlsb 文件的模块 2 运行宏:

Dim path As String
path = Application.ActiveWorkbook.path
path = path & "\"

Workbooks("2cDataSet.xlsm").Activate
'MsgBox (path & "2cDataSet.xlsm!publicdatahandler")
'Application.Run (path & "2cDataSet.xlsm!publicDataHandler")
'Application.Run (path & "'2cDataSet.xlsm'!publicDataHandler")
'Application.Run (path & "2cDataSet.xlsm!Module2.publicDataHandler")
'Application.Run (path & "'2cDataSet.xlsm'!Module2.publicDataHandler")

'Application.Run ("2cDataSet.xlsm!publicDataHandler")
'Application.Run ("'2cDataSet.xlsm'!publicDataHandler")
'Application.Run ("2cDataSet.xlsm!Module2.publicDataHandler")
'Application.Run ("'2cDataSet.xlsm'!Module2.publicDataHandler")

'Application.Run "2cDataSet.xlsm!publicDataHandler"
'Application.Run "'2cDataSet.xlsm'!publicDataHandler"
'Application.Run "2cDataSet.xlsm!Module2.publicDataHandler"
'Application.Run "'2cDataSet.xlsm'!Module2.publicDataHandler"

'Application.Run path & "2cDataSet.xlsm!publicDataHandler"
'Application.Run path & "'2cDataSet.xlsm'!publicDataHandler"
'Application.Run path & "2cDataSet.xlsm!Module2.publicDataHandler"
'Application.Run path & "'2cDataSet.xlsm'!Module2.publicDataHandler"

'Run macro:="2cDataSet.xlsm!Module2.publicdatahandler"
'Run macro:="2cDataSet.xlsm!publicdatahandler"

这似乎与这里的问题相同,除了我认为这种情况下的问题是由 2 个不同的 excel 文件的融合引起的,而不是宏的未启用:

Cannot run the macro... the macro may not be available in this workbook

因为它表明我已通过以下方式手动启用宏和对象安全设置:

  1. 单击 Microsoft Office 按钮,然后单击 Excel 选项。
  2. 点击信任中心。
  3. 点击信任中心设置。
  4. 点击宏设置。
  5. 单击以选中“信任对 VBA 项目对象模型的访问”复选框。
  6. 单击“确定”关闭“Excel 选项”对话框。
  7. 关闭并重新打开 excel。

我还单击了该对象模型复选框上方的“启用宏按钮”。

我尝试先手动打开 2cDataSet.xlsm,然后在出现提示时手动启用宏,然后打开父 .xlsb,反之亦然(在启用.xlsb 的宏)

而且我认为我在任何尝试过的选项中都尝试了正确的语法。 *到目前为止,我也知道单个 ' 仅在名称包含空格的情况下使用。

我没有删除宏并重新创建它。

我检查了“选项显式”是否没有写成“选项显式”,但根本没有写

子是公开的。

我写它的办公室是2016,另一台电脑上的版本是2013,但我在2016办公室遇到了同样的错误,但对于某些我未知的原因,有时在切换子语法的调用后或重新打开excel文件,错误不再发生或不一致。

关于为什么excel给出以下错误的任何建议:

无法运行宏,该宏在此工作簿中可能不可用 或者所有宏都可能被禁用

在调用 sub 之后?

附言。它用于分布式自动计算,因此我将无法编辑 pc(或 excel)设置,并且弹出窗口是一个 nono :)

问题是在合并 vba 项目后,即使父 .xlsb 文件被复制并移动到不同的路径,excel 仍将对 .xlsm 文件的引用保留到旧文件夹。

目前正在验证的解决方案是:将原始文件移动到新父文件的文件夹中,并与包含的实际 .xlsm 共享整个文件夹,以便在另一台计算机上运行

【问题讨论】:

  • “我添加了不同 xlsm 的 VBA 项目” 但“xlsm”是“普通”excel 文件的扩展名,即其中没有 VBA 模块。您确定 acDataSet.xlsm 是要添加为 VBA 项目参考的工作簿的正确名称吗?
  • @user3598756 - xlsx 是我所说的裸文件 :) xlsm - m 用于宏; )
  • @Irithyll 对,我在 xlsm-xlsb 和 xlsx-xlsm 之间搞错了。

标签: vba module call xlsm xlsb


【解决方案1】:

我将不同 xlsm 文件的 VBA 项目添加到 .xlsb。

你必须像这样打开 *.xlsm:

Sub openFile_RunMacro()

     Workbooks.Open "File2.xlsm" 'if File2.xlsm is in the same path as File1.xslb

     'otherwise » Workbooks.Open path & "File2.xlsm" «

     Application.Run ("File2.xlsm!Test")

End Sub

如果激活宏的消息让您感到厌烦,请尝试将使用的路径设置为可信位置

编辑

我正在尝试使用以下代码中的以下任一行从 .xlsb 文件的模块 2 运行宏

所以您尝试运行 .xlsb 文件中的代码?然后,您必须将代码中的文件名从 .xlsm 更改为 .xlsb

【讨论】:

  • 我不知道您将路径设置为受信任位置是什么意思,我认为它是 pc 而不是 excel 设置。我正在尝试从 xlsb 文件运行代码,但另一个合并的 vba 项目来自 .xlsm 文件不是问题。谢谢你的建议:)
  • @MaximilianbrutusIII - 我在我的答案中添加了一张图片 -> 受信任的位置。这是一个 Excel 选项 File -> Options -> Trust Center -> Trusted Locations :)
  • 啊,谢谢,这扩展了我的知识。此外,如果将原始 .xlsm 文件合并到新文件夹中无法解决问题,我将尝试看看它是否有助于解决问题。
猜你喜欢
  • 1970-01-01
  • 2019-02-11
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多