![](/img/trans.png)
[英]UserForm error: Method 'Properties' of object '_VBComponent' failed
[英]Runtime error 32813 - Method 'Name' of object '_VBComponent' failed
我正在嘗試重命名導致運行時錯誤的模塊。 在下面的代碼“vbComp.name = moduleName”中,這一行導致了運行時錯誤。 當我更多地查看它時,我發現相同的模塊已經存在,因此它不允許重命名。 即使我調用了刪除引用,它實際上並沒有刪除引用.. 我嘗試了 Doevents,我在一個單獨的過程中調用了刪除引用代碼,如下所示.. 仍然在執行代碼后,模塊沒有被刪除。
一些額外的信息。 所以基本上這段代碼是在'a.xla'中調用的,傳遞的XLAName是一個不同的xla'b.xla'
Private Sub AddFileToAddIn(XLAName As String, moduleName As String, Filename As String)
Dim vbc As VBComponent
Dim ActiveProjName As String
ActiveProjName = Application.VBE.ActiveVBProject.name
Dim vbproj As VBProject
Dim vbComp As VBComponent
' Find the project named XLAName
For Each vbproj In Application.VBE.VBProjects
If vbproj.name = XLAName Then
' Add the file named FileName
Set vbComp = vbproj.VBComponents.Import(Filename)
If Not vbComp Is Nothing Then ' If we have successfully imported the file
' See if a module with the name - ModuleName - already exists in this project, and if so, delete it
RemoveModuleFromAddin vbproj, moduleName '-----> **Not deleting the moduleName**
' Change the new modules name to ModuleName from "module1"
vbComp.name = moduleName '---->**Since the moduleName is not deleted and it exists, renaming it is causing the run time error.**
End If
Exit Sub
End If
Next vbproj
End Sub
Private Sub RemoveModuleFromAddin(proj As VBProject, moduleName As String)
Dim module As VBComponent
For Each module In proj.VBComponents
If module.name = moduleName Then
proj.VBComponents.Remove module
Exit Sub
End If
Next module
End Sub
當我測試RemoveModuleFromAddin
它對我來說很好用。
這也有效:
Sub Tester()
AddFileToAddIn "VBAProject1", "Module3", "C:\Temp\Module3.bas"
End Sub
Private Sub AddFileToAddIn(XLAName As String, moduleName As String, Filename As String)
Dim vbproj As VBProject
On Error Resume Next 'ignore error if no matching project
Set vbproj = Application.VBE.VBProjects(XLAName)
On Error GoTo 0
If vbproj Is Nothing Then Exit Sub
On Error Resume Next 'ignore error if no module with matching name
vbproj.VBComponents.Remove vbproj.VBComponents(moduleName)
On Error GoTo 0
vbproj.VBComponents.Import(Filename).Name = moduleName
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.