我的一个客户端在运行下面的Excel代码时出了问题。他得到了下面的错误Method 'VBE' of object '_Application' failed,但是只有一次,在他打开VBE之后,它就开始工作了。而且,直到昨天还在为他工作。
他正在使用Excel 2010。
这是抛出错误的代码。
For Each f In Application.VBE.ActiveVBProject.VBComponents
If InStr(1, f.Name, "UserForm") = 1 Then
Application.VBE.ActiveVBProject.VBComponents.Remove (f)
End If
Next f发布于 2016-12-22 22:20:23
您需要通过导航到Excel选项中的信任中心来确保对VBE的访问是可信的。
在vbComponents上的某些操作要求VBE至少打开一次,或者至少要求VBA在尝试枚举VBComponents之前引用vbComponents。
看起来,您的客户端代码可能在auto_open过程或Workbook_Open事件中运行。如果在枚举vbComponents之前显式地添加了引用VBE的行,您可能会发现代码再次开始工作。
Debug.Assert Application.VBE.ActiveVBProject.Name <> vbNullString
For Each f In Application.VBE.ActiveVBProject.VBComponents
If InStr(1, f.Name, "UserForm") = 1 Then
Application.VBE.ActiveVBProject.VBComponents.Remove (f)
End If
Next f请参阅关于这个问题的答案:VBA changing sheet codename Run-Time Error 9: Subscript out of range
发布于 2019-01-22 10:20:39
@ThunderFrame提到的@ThunderFrame不适合我,但是信任中心选项做到了:(取决于您的Excel版本,类似于):
Excel -> Menu -> File
-> Options
-> Trust Center
-> Macro Settings
-> Developer Macro Settings
-> [x] Trust access to the VBA project object model解决这种依赖于VBComponent的代码问题的一般方法是使用灵活的procedure given here,对每个新打开的工作簿进行多次调用,而这些工作簿可能还不是"VBComponent-initialized“。
https://stackoverflow.com/questions/34143670
复制相似问题