Более правильный ответ на этот вопрос заключается в том, что конструкция With должна быть направлена на простую последовательность методов получения и установки объекта.
Хорошим примером этого является объект Word Find, где приведенный ниже код является общим
With ActiveDocument.Content.Find
.Text = "FindText"
.Replacement.Text = "ReplaceText"
.Forward = True
.Wrap = wdFindStop
Do While .Execute() = True
.TypeParagraph
.MoveLeft Unit:=wdWord, Count:=2, Extend:=wdExtend
.Find.Replacement.Font.Italic = True
.Font.Bold = True
.Collapse Direction:=wdCollapseEnd
Loop
End With
Более правильный способ решения возникшей проблемы - использовать соответствующие объекты с локальной областью действияукажите нужные вам сочетания клавиш, например
Вместо
With ThisWorkbook.Sheets("Program")
'Do xyz
End With
Использование
Dim mySourceWb as excel.Worksheet
Set mySOurceWb = ThisWorkbook.Sheets("Program")
Dim myDestWb as Excel.Worksheet
Set myDestWB = ADifferentWb.Sheets("YetAnotherSpreadsheet")
'Do xyz
set mySourceWb=nothing
set myDestWb=nothing