首页 文章

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

提问于
浏览
2

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

我从网站上提取数据报告,此报告以.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() End Sub

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

2 回答

  • 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

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

    我在共享网络上保存了原始宏,但我必须将其保存为 module (在本例中为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
    

    祝好运!

相关问题