【问题标题】:Method 'VBE' of object '_Application' failed对象“_Application”的方法“VBE”失败
【发布时间】:2015-12-07 21:35:28
【问题描述】:

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

【问题讨论】:

  • 听起来像是权限设置。他有什么信任中心宏设置? Excel:文件 -> 选项,信任中心。信任中心 -> 宏设置。是否勾选了“信任对 VBA 项目对象模型的访问”?
  • 您实际上尝试了哪些方法来确定问题?您需要展示您的研究成果。
  • 当您循环访问该集合时,最好不要从集合中删除内容。将项目添加到数组或新集合中,然后在完成初始循环后将其删除。
  • 使用不必要的括号也会导致问题 - 它应该是 .Remove f 而不是 .Remove (f)
  • @PatricK 我检查了第一件事。它就在那里。

标签: vba excel vbe vbide


【解决方案1】:

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

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

解决这种依赖于 VBComponent 的代码问题的一般方法是使用 VbeInit procedure given here,它可以灵活地为每个新打开的工作簿调用多次尚未“VBComponent-初始化”。

【讨论】:

  • 目前,如果我打开 Excel (2010) 并且 Workbook_Open 事件正在访问 VBComponents,我可以重现该问题,尽管信任中心设置正常。虽然它在 Excel 2016 中工作:-/
  • 因为我只想(通常)访问Application.VBE.ActiveVBProject.VBComponents("MyModule").ActiveVBComponent.FileName,我通过调用MyWorkbook.FullName 来替换它以获得Excel 2010 支持。
【解决方案2】:

您需要通过导航到 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多