Итак, у меня есть система с несколькими книгами.При запуске рабочая книга должна создать копию целевой рабочей книги, удалить все модули и формы, защитить ее паролем, сохранить и закрыть ее.Все это прекрасно работает, кроме удаления модулей и форм.Когда я отключаю подпрограмму DeleteAllMacros, код работает хорошо: он делает копию, защищает книгу, сохраняет и закрывает ее и продолжает следующую процедуру.
Когда я включаю подпрограмму DeleteAllMacros, код останавливается (без каких-либо ошибок) прямо перед подпрограммой и не удаляет модули или формы.Процедура не продолжается и ничего не происходит.Когда я запускаю DeleteAllMacros вручную, он работает просто отлично, и все модули и исходные файлы удаляются.
Я не могу понять, в чем проблема, поскольку код на самом деле работает нормально, но когда я пытаюсь вызвать его, он просто останавливается.Ниже приведены важные части кода:
Public Sub Copy_file(C)
'[removed some code that is not necessary for the problem]
Application.AskToUpdateLinks = False ' disables automated link update
Application.AutomationSecurity = msoAutomationSecurityForceDisable ' disables macros running on start
Set wb = Workbooks.Open(Filename:=fn, Password:=pw, UpdateLinks:=0)
Application.AutomationSecurity = msoAutomationSecurityByUI ' enables macros running on start
Application.AskToUpdateLinks = True ' enables automated link update
For i = 1 To Sheets.Count
Sheets(i).Unprotect Password:="XXXX"
Next i
Call BreakExternalLinks(wb, pw) ' Remove links
Call kill_macros(wb) '
Application.DisplayAlerts = False ' Skips the are you sure you want to save
Workbooks(new_name).SaveAs Password:="XXXX", Filename:=fn
Application.DisplayAlerts = True
Workbooks(new_name).Close
End Sub
----------------------------------------
Public Sub kill_macros(wb)
Dim otmp As Object
With wb.VBProject
For Each otmp In wb.VBProject.VBComponents
If otmp.Type = 100 Then
otmp.CodeModule.DeleteLines 1, otmp.CodeModule.CountOfLines
otmp.CodeModule.CodePane.Window.Close
Else
wb.VBProject.VBComponents.Remove otmp
End If
Next otmp
End With
End Sub