簡體   English   中英

運行時錯誤 32813 - 對象“_VBComponent”的方法“名稱”失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM