所以,我已经对此做了很多研究,我的代码仍然没有工作 . 根据 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 回答
您需要传递给Application.Run的字符串取决于包含宏的工作簿是否处于活动状态,如果不是,则取决于包含宏的工作簿的文件名(IE:workbook.Name属性中的内容) .
如果在数据报表工作簿处于活动状态时应该运行宏,则需要:
这将保证提供正确的字符串,即使您更改宏文件的名称 .
否则,如果宏工作簿应该处于活动状态,则跳过激活数据工作表,因为默认情况下最后打开的工作簿将处于活动状态,然后使用“ADDHMKRFID”作为字符串 . 注意“!”不见了 . 只有在另一个工作簿中指定宏时才需要它 . 它与其他工作表中的数据引用时使用的符号相同 .
首先,我解决了自己的问题 . 但是,如果有人可以向我解释为什么它按照它的方式运作,我会感激不尽 .
我在共享网络上保存了原始宏,但我必须将其保存为 module (在本例中为Module1) . 我还在另一个工作簿中保存了第二个宏(运行原始宏)(尽管它不重要,只要它不是.xlsx文件) .
我写的守则是:
然后我将这个宏保存到功能区,以便我可以在我必须下载的数据report.xlsx文件上运行它 . 现在,只要我想运行原始宏,我只需单击测试宏,它就会运行另一个宏!
我猜你是否要关闭你打开的其他工作簿,你可以添加一个
祝好运!