Виснет Excel при попытке программно прописать код в модуле

Программирование на Visual Basic for Applications
dimonbk
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 03.01.2006 (Вт) 14:57

Виснет Excel при попытке программно прописать код в модуле

Сообщение dimonbk » 10.12.2008 (Ср) 15:28

Доброго времени суток. Возникла необходимость изменить макросы в 30 файлах. Все эти файлы были сделаны из одного шаблона. Когда пытаюсь вписать программный код из книги источника в книгу-цель Excel виснет и возникает окно "Отправить отчет или нет". Не могу понять проблемы, на форуме похожей проблемы не нашел.
Вот программный код, жирным выделен код при выполнении которого виснет Excel. Иногда этот код выполняется, закономерность не выявлена. Помогите кто может. Может я что не так делаю. Заранее огромное спасибо

Sub Макрос1()

Dim wbTemplate As Workbook
Dim wbOpen As Workbook
Dim shTemlate As Worksheet
Dim shOpen As Worksheet
Dim i As Integer, j
Dim VBCodeMod As VBIDE.CodeModule
Dim VBCodeTemplate As VBIDE.CodeModule
Dim VBComp As VBIDE.VBComponent
Dim strSecretName As String


Set wbTemplate = Workbooks("Модель расчета пени.xltm")
Set wbOpen = Workbooks("Авангард ООО СХП Кантемировский район.xlsm")

'Если проект заблокирован то надо вручную разблокировать его
If wbTemplate.VBProject.Protection = vbext_pp_locked Then Stop
If wbOpen.VBProject.Protection = vbext_pp_locked Then Stop

For Each VBComp In wbOpen.VBProject.VBComponents
If VBComp.Type = vbext_ct_StdModule Then
wbOpen.VBProject.VBComponents.Remove VBComp
End If
Next

With wbOpen.VBProject.VBComponents
.Import "D:\ModuleVariables.bas"
End With

Set VBCodeTemplate = wbTemplate.VBProject.VBComponents(wbTemplate.Sheets("Template").CodeName).CodeModule

For i = 1 To wbOpen.Sheets.Count
strSecretName = Choose(i, "Лист1", "Лист2", "Лист3", "Лист4", "Лист8")
Set shOpen = wbOpen.Sheets(i)
If shOpen.CodeName = strSecretName Then
Set VBCodeMod = wbTemplate.VBProject.VBComponents(strSecretName).CodeModule
With wbOpen.VBProject.VBComponents(strSecretName).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString VBCodeMod.Lines(1, VBCodeMod.CountOfLines)
End With
Else
With wbOpen.VBProject.VBComponents(shOpen.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString VBCodeTemplate.Lines(1, VBCodeTemplate.CountOfLines)
End With
End If
Next i

Set VBCodeMod = Nothing
Set VBCodeTemplate = Nothing

Set VBCodeMod = wbTemplate.VBProject.VBComponents("ЭтаКнига").CodeModule

With wbOpen.VBProject.VBComponents("ЭтаКнига").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString VBCodeMod.Lines(1, VBCodeMod.CountOfLines)
End With

End Sub
Все будет хорошо

Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 38

    TopList