批量修改受保护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
相关产品推荐
相关产品推荐

