You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量修改受保护VBA工程模块代码遇运行时错误5求助

批量修改受保护VBA工程的Excel模块代码问题
  • 需求:自动修改多个Excel文件中指定模块的代码,但所有目标文件的VBA工程均受保护,需先完成解锁操作。
  • 问题:执行解锁函数中的VBE.CommandBars相关指令时,触发Runtime error 5错误,已尝试多个不同版本的解锁函数仍未解决。

以下是当前使用的VBA代码:

Option Explicit

Sub UnLockAndViewVBAProject()
     With Application
        '执行“VBAProject 属性...”命令,调出密码对话框,先输入密码
        .SendKeys "hola3"
         .SendKeys "{ENTER}"
        '重置工程密码,确保工作簿关闭后重新锁定
        .VBE.CommandBars("Menu Bar").Controls("Tools") _
            .Controls("VBAProject Properties...").Execute
        .SendKeys "^{TAB}"
        .SendKeys "{TAB}" & "{TAB}" & "{TAB}" & "hola3"
        .SendKeys "{TAB}" & "hola3"
        .SendKeys "{TAB}"
        .SendKeys "{ENTER}"
     End With
End Sub

Sub ACTUALIZAR_MODULO()
'声明变量
Dim nArchivos, CodigoCopiar, CodigoPegar
Dim destino As String, NombreLibro As String
Dim FSO As Variant, i As Long, lineas As Long
Dim WB As Workbook
Dim unpassVB As String

'关闭屏幕更新
Application.ScreenUpdating = False

'选择一个或多个文件
nArchivos = Application.GetOpenFilename(filefilter:="Excel (*.xls*),*.xls", _
Title:="SELECCIONAR ARCHIVO", MultiSelect:=True)

'指定要修改代码的工作表或模块名称(此处为模块)
destino = "D_Utilidades"

'若未选择任何文件则退出程序
If Not IsArray(nArchivos) Then
    Exit Sub
Else

    If destino = Empty Then
        Exit Sub
    Else
        
        '遍历选中的所有文件
        For i = LBound(nArchivos) To UBound(nArchivos)
        
            '打开每个文件
            Set WB = Workbooks.Open(Filename:=(nArchivos(i)))
                    
            With ActiveWorkbook
            
                '解锁VBA工程,以便检查目标模块是否存在
                UnLockAndViewVBAProject
                
                '删除目标模块中的所有原有代码
                .VBProject.VBComponents(destino).CodeModule.DeleteLines 1, .VBProject.VBComponents(destino).CodeModule.CountOfLines
                
                '复制当前工作簿中CODIGO_A_COPIAR模块的代码
                Set CodigoCopiar = ThisWorkbook.VBProject.VBComponents("CODIGO_A_COPIAR").CodeModule
                '将复制的代码粘贴到目标模块中
                Set CodigoPegar = .VBProject.VBComponents(destino).CodeModule
                lineas = CodigoCopiar.CountOfLines
                CodigoPegar.AddFromString CodigoCopiar.Lines(1, lineas)
                    
                '保存并关闭当前打开的文件
                WB.Close SaveChanges:=True
                
            End With
    
        Next i
        
    End If
    
End If

End Sub

内容的提问来源于stack exchange,提问作者Marctrix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:05:04