我使用下面的代码替换目标工作簿中的模块。代码在当前目录的Updates子文件夹中搜索.bas文件,并在找到时删除旧版本,然后导入代码。它在大多数情况下都有效,但有时一个或多个被替换的模块假定名称为xxxxx1,其中xxxxx是.bas文件的名称。它只是使用" 1"附加模块名称。没有其他模块具有相同的名称。我检查了.bas文件,第一行正确定义了VB_Name - 属性VB_Name =" xxxxx"。删除工作正常。只是导入有时会导致问题。我在删除之后添加了一个Application.Wait,认为这可能会有所帮助,但问题仍在继续。
请注意,例程使用其他函数来确定目录路径并查找文件。调试已经证明它们工作正常。这个问题似乎是在导入时随机发生的。
任何帮助将不胜感激!
Dim iFilesNum As Integer
Dim iCount As Integer
Dim recMyFiles() As FoundFileInfo
Dim blFilesFound As Boolean
Dim directoryPath As String
Dim wbTarget As Workbook
Dim vbMod As Object
Dim myFile As String
Dim txtLine As String
Set wbTarget = ActiveWorkbook
directoryPath = getDirectoryPath("Updates")
If Dir(directoryPath, vbDirectory) = "" Then
varX = MsgBox("Updates directory not found. To apply updates you must first " & _
"unload the updates from the file that was emailed to you.", vbOKOnly, "IPM by Merlin")
Exit Sub
End If
blFilesFound = FindFiles(directoryPath, recMyFiles, iFilesNum, "*.bas", False)
If blFilesFound Then
For iCount = 1 To iFilesNum
With recMyFiles(iCount)
.sName = Replace(.sName, ".bas", "")
Set vbMod = Application.VBE.ActiveVBProject.vbComponents 'First we need to remove the existing module
vbMod.Remove VBComponent:=vbMod.Item(.sName)
Application.Wait (Now + #12:00:01 AM#)
wbTarget.VBProject.vbComponents.Import directoryPath & "\" & .sName & ".bas" 'import the new module.
End If
Kill directoryPath & "\" & .sName & ".bas"
End With
Next
Else
varX = MsgBox("No updates files found in the Updates directory.", vbInformation, "IPM by Merlin")
End If
答案 0 :(得分:0)
问题似乎是模块并非总是立即被删除。在这种情况下,将添加1。我尚未发现到底发生了什么:我在文件“ exporter.bas”中有一个模块,名称为“ exporter”,存在此问题。我复制了一个文件“ yippee.bas”,并命名为“ yippee”(其余文件内容相同,因此没有“损坏的文件”),并且没有这个问题。
我发现VbComponents.Remove doesn't always remove module有帮助。我实施了该问题发布者的重命名解决方法。