【发布时间】: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
因为它表明我已通过以下方式手动启用宏和对象安全设置:
- 单击 Microsoft Office 按钮,然后单击 Excel 选项。
- 点击信任中心。
- 点击信任中心设置。
- 点击宏设置。
- 单击以选中“信任对 VBA 项目对象模型的访问”复选框。
- 单击“确定”关闭“Excel 选项”对话框。
- 关闭并重新打开 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 之间搞错了。