如何从共享networking中的其他工作簿运行macros?

所以,我已经做了大量的研究,我的代码还没有运行。 根据标题,问题是这样的:

我从网站上提取数据报告,这个报告是以.xlsx文件格式下载的。 我在function区上创build了一个macros,所以当我单击它时,它将打开另一个工作簿并运行该macros。 我使用的代码如下所示:

Option Explicit Sub NotHardAtAll() Dim ws As Worksheet, Dim wb As Workbook Set wb = ActiveWorkbook Set ws = ActiveSheet Workbooks.Open Filename:="C:\Users\a0c27n\Desktop\Projects\incident_extended_report1.xlsm" 'With Sheets("Sheet4").Activate '*Not sure if this is enter code here necessary...at all* Application.Run "!ADDHMKRFID" 'End With End Sub 

我已经尝试把macros之前的path(即Application.Run"'incident_extended_report1.xlsm!ADDHMKRFID" ),但它不工作*

我知道,至less从我做的研究中,我应该能够使用'Application.Run'方法,但是我无法得到它访问正确的工作表。

当我运行macros,它将拉动一个运行时错误'1004'错误,一个'400',或它拉最大的是:“无法运行macros'ADDHMKRFID'。macros可能无法在此工作簿或者所有macros可能被禁用。“

我试图从macros中拉出的文件如下:

工作簿名称: incident_extended_report1.xlsm

工作表名称: Sheet4(TEST MACRO)

macros名称: Sub ADDHMKRFID()End Sub

我明白C:\并不是一个共享的networking,但是我将要解决的问题将是S:\,但是我不确定我可以提供多less信息来保密。 请询问您可能有的任何澄清或问题。 我一直坚持了一下,不知道我在做什么错。 提前致谢!

您需要传递给Application.Run的string取决于包含macros的工作簿是否处于活动状态,如果不是,则为包含macros的工作簿的文件名(IE:workbook.Name属性中的内容)。

如果macros应该在数据报告工作簿处于活动状态时运行,则需要:

 dim wb_data as Workbook: set wb_data = ActiveWorkbook dim ws_data as Worksheet: set ws_data = ActiveSheet dim wb_macro as Workbook set wb_macro = Workbooks.Open(Filename:="C:\Users\a0c27n\Desktop\Projects\incident_extended_report1.xlsm") ws_data.Activate Application.Run wb_macro.Name & "!ADDHMKRFID" 

这将保证提供正确的string,即使您更改macros文件的名称。

否则,如果macros工作簿应该处于活动状态,则跳过激活数据工作表,因为最后打开的工作簿默认处于活动状态,则使用“ADDHMKRFID”作为string。 请注意,“!” 不见了。 只有在另一个工作簿中指定macros时,您才需要这样做。 在引用其他工作表中的数据时使用的是同样的符号。

首先,我解决了自己的问题。 但是,如果有人向我解释为什么它的工作方式如此,我将不胜感激。

我保存了共享networking上的原始macros,但是我不得不将它保存为一个模块 (在本例中为Module1)。 我还在另一个工作簿中保存了第二个macros(运行原来的macros)(尽pipe它不应该影响,只要它不是.xlsx文件)。

我写的守则是:

 Sub Test() 'Name doesn't matter Application.Run "'S:\xxxx\xxxx\xxxx\incident_extended_report.xlsm'!module1.ADDHMKRFID" End Sub 

然后我将这个macros保存到function区,这样我就可以在我要下载的数据report.xlsx文件上运行它了。 现在,任何时候我想运行原始的macros,我只需点击testingmacros,它就会运行另一个!

我猜如果你想closures你打开的其他工作簿,你可以添加一个

  Workbooks (“S:\xxxx\xxxx\xxxx\incident_extended_report.xlsm").Close Savechanges:=False 

祝你好运!