所以,我已经对此做了很多研究,我的代码仍然没有工作。根据标题,问题是:
我从网站上提取数据报告,此报告以.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:\,但是我不确定由于机密性我可以发布多少信息。 请询问您可能有的任何澄清或问题。我已经被困了一段时间,我不确定我做错了什么。提前谢谢!
答案 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
祝你好运!