Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 方法';VBE';对象的'_应用程序';失败_Vba_Excel_Vbe_Vbide - Fatal编程技术网

Vba 方法';VBE';对象的'_应用程序';失败

Vba 方法';VBE';对象的'_应用程序';失败,vba,excel,vbe,vbide,Vba,Excel,Vbe,Vbide,我的一个客户在运行下面的Excel VBA代码时遇到问题。他得到以下错误对象“\u应用程序”的方法“VBE”失败,但只有一次,在他打开VBE后,它开始工作。而且,直到昨天他还一直在工作 他正在使用Excel 2010 这是引发错误的代码 For Each f In Application.VBE.ActiveVBProject.VBComponents If InStr(1, f.Name, "UserForm") = 1 Then Application.VBE.Act

我的一个客户在运行下面的Excel VBA代码时遇到问题。他得到以下错误
对象“\u应用程序”的方法“VBE”失败
,但只有一次,在他打开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选项中的信任中心,您需要确保对VBE的访问是可信的

对VBComponents执行的某些操作要求VBE至少打开一次,或者至少在VBA尝试枚举VBE组件之前引用了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
您的客户端代码可能正在
自动打开
过程或
工作簿打开
事件中运行。如果在枚举VBE组件之前显式添加引用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
Debug.Assert Application.VBE.ActiveVBProject.Name vbNullString
对于Application.VBE.ActiveVBProject.VBComponents中的每个f
如果InStr(1,f.Name,“UserForm”)=1,则
Application.VBE.ActiveVBProject.VBComponents.Remove(f)
如果结束
下一个f
详见本问题答案:
提到的
Debug.Assert…
对我不起作用,但是信任中心选项对我起作用了:(取决于您的Excel版本):


解决此类依赖VBComponent的代码问题的一般方法是使用,对于每个新打开的工作簿,如果尚未“初始化VBComponent”,可以灵活地多次调用该选项。

听起来像是权限设置。他有哪些信任中心宏设置?Excel:文件->选项,信任中心。信任中心->宏设置。是否勾选了“对VBA项目对象模型的信任访问”选项?您实际尝试了哪些方法来识别问题?你需要展示你的研究成果。最好不要在循环浏览某个集合时删除该集合中的内容。将项目添加到数组或新集合中,然后在完成初始循环后将其删除。使用不必要的括号也会导致问题-应该是
。删除f
,而不是
。删除(f)
@PatricK我检查了第一件事。它就在那里。目前,如果我打开Excel(2010),并且
工作簿_open
事件正在访问VBComponents,我可以重现该问题,尽管信任中心设置正常。但它在Excel 2016中工作:-/因为我只想(一般)访问
应用程序.VBE.ActiveVBProject.VBComponents(“MyModule”).ActiveVBComponent.FileName
我将其替换为调用
MyWorkbook.FullName
,以获得Excel 2010支持。