我的一位客户在下面运行Excel VBA代码时出现问题。他得到以下错误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
答案 0 :(得分:3)
您需要确保通过导航到Excel选项中的信任中心来确保对VBE的访问是可信的。
VBComponents上的某些操作要求VBE至少打开一次,或者至少打开VBA在尝试枚举vbComponents之前引用了VBE 。
您的客户端代码可能正在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
答案 1 :(得分:0)
@ThunderFrame提到的Debug.Assert ...
对我不起作用,但是信任中心选项可以:(取决于您的Excel版本):
Excel -> Menu -> File
-> Options
-> Trust Center
-> Macro Settings
-> Developer Macro Settings
-> [x] Trust access to the VBA project object model