4

我的一位客户在运行下面的 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
4

2 回答 2

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 更改工作表代号运行时错误 9:下标超出范围

于 2016-12-22T22:20:23.917 回答
1

@ThunderFrameDebug.Assert ...提到的对我不起作用,但信任中心选项可以:(取决于您的 Excel 版本,例如):

Excel  ->  Menu  ->  File
->  Options
    ->  Trust Center
        ->  Macro Settings
            ->  Developer Macro Settings
                ->  [x] Trust access to the VBA project object model

解决此类与VBComponent相关的代码问题的一般方法是使用VbeInit此处给出的过程,该过程可以灵活地为每个新打开的可能尚未“初始化VBComponent ”的工作簿多次调用。

于 2019-01-22T10:20:39.553 回答