如何从共享网络中的不同工作簿运行宏?

时间:2017-10-03 16:44:02

标签: excel vba excel-vba

所以,我已经对此做了很多研究,我的代码仍然没有工作。根据标题,问题是:

我从网站上提取数据报告,此报告以.xlsx文件的形式下载。我在功能区上创建了一个宏,所以当我单击它时,它将打开另一个工作簿并运行该宏。我正在使用的代码如下:

    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

我已尝试将路径放在宏之前(即Application.Run"'incident_extended_report1.xlsm!ADDHMKRFID"),但它不起作用*

我知道,至少在我已经完成的研究中,我应该能够使用'Application.Run'方法,但我无法访问它正确的表格。

当我运行宏时,它会导致运行时错误'1004'错误,'400'或它拉得最多的是:“无法运行宏'!ADDHMKRFID'。宏可能无法使用在此工作簿或所有宏可能会被禁用。“

我试图从中提取宏的文件如下:

工作簿名称: incident_extended_report1.xlsm

工作表名称: Sheet4(TEST MACRO)

宏名称: Sub ADDHMKRFID() 结束次

我知道C:\不是共享网络,我将要处理的是S:\,但是我不确定由于机密性我可以发布多少信息。 请询问您可能有的任何澄清或问题。我已经被困了一段时间,我不确定我做错了什么。提前谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

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"

即使您更改了宏文件的名称,也可以保证提供正确的字符串。

否则,如果宏工作簿应该是活动的,则跳过激活数据工作表,因为默认情况下最后打开的工作簿将处于活动状态,然后使用" ADDHMKRFID"作为你的字符串。请注意"!"不见了。只有在另一个工作簿中指定宏时才需要它。它是在引用其他工作表中的数据时使用的相同符号。

答案 1 :(得分:1)

首先,我解决了自己的问题。但是,如果有人可以向我解释为什么它按照它的方式工作,我会感激不尽。

我将原始宏保存在共享网络上,但我必须将其保存为模块(在本例中为Module1)。我还在另一个工作簿中保存了第二个宏(运行原始宏)(尽管它不重要,只要它不是.xlsx文件)。

我写的代码是:

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

然后我将此宏保存到功能区,以便我可以在我必须下载的数据report.xlsx文件上运行它。现在,无论何时我想运行原始宏,我只需单击测试宏,它就会运行另一个宏!

我猜你是否要关闭你打开的其他工作簿,你可以添加一个

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

祝你好运!