|
本帖最后由 wqsk001 于 2020-2-24 21:12 编辑
谢谢大神!这个刚才测试了一下,可以用。不过只能用于当前目录下的文件,看能不能帮着再改进一下,把子目录下的文件一块也给改了,拜谢了,在线等。
下面的这个代码经测试也是成功的(代码也是我在论坛找的)。这个代码麻烦的地方是要一个一个的手工去选文件。好处在于不用把代码写到模块里,且带有删除更新功能。找出来供大神参考一下
Sub Update()
Dim F
Dim Cl As Object
Dim I As Long, N As Long
Dim Ar() As String
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False '防止open close 等事件触发
'*****************************************************************
'获取新代码
ReDim Ar(ThisWorkbook.VBProject.VBComponents.Count, 2)
For Each Cl In ThisWorkbook.VBProject.VBComponents
If m.Name <> "Update" Then '不读取本模块代码
Ar(N, 1) = Cl.Name
Ar(N, 2) = Cl.CODEMODULE.Lines(1, Cl.CODEMODULE.COUNTOFLINES)
N = N + 1
End If
Next
'*****************************************************************
'获取待更新文件
F = Application.GetOpenFilename("Excel(*.xls*),*.xls*", , "选择要更新的文件", , False)
If F = False Then Exit Sub
'*****************************************************************
'打开待更新文件,删除旧代码,写入新代码
With Workbooks.Open(F)
With .VBProject
For I = 0 To N - 1
Set Cl = Nothing
Set Cl = .VBComponents(Ar(I, 1))
If Not Cl Is Nothing Then
With Cl.CODEMODULE
.DELETELINES 1, .COUNTOFLINES
.ADDFROMSTRING Ar(I, 2)
End With
End If
Next
End With
'*****************************************************************
' XLSX 文件需要另存为启用宏的工作表 XLSM 格式
If UCase(Right(F, 4)) = "XLSX" Then
.SaveAs Left(F, Len(F) - 5), 52
'Kill F '删除 XLSX 格式原文件
Else
.Save
End If
.Close True
End With
Application.EnableEvents = True
End Sub
|
|