ol7ca Скорее всего что-то всё-таки изменилось. Можно ждать, когда глюк снова проявится, хотя я бы проверял, есть ли лист с заданным именем в книге перед тем, как получать указатель командой Set. Но и самих глюков (в том числе и необъяснимых) в Excel тоже хватает. В любом случае, чтобы исправить ошибку надо сделать так, чтобы её можно было воспроизвести хотя бы у себя.
Добавлено: k0s Код не рабочий, не совсем понимаю, что он должен делать. Завтра попробую что-нибудь смастерить сам по вашему
описанию.
Добавлено: ol7ca Я понял, в чём у вас проблема. Виной всему
On error Resume Next. У вас при возникновении ошибки пропускается блок
Set X = ..., но не пропускается блок
If X Is Nothing Then ... End if. Поэтому в последнем блоке программа работает со старым указателем.
Добавлено: Ещё мне непонятно, зачем вы в цикле вызываете
On Error Resume Next. Это было бы понятно, если происходит в цикле включение обработчика ошибок с последующим его отключением. У вас отключения я не нашёл. Мой вам совет - выкинуть
On Error Resume Next, присваивать имя листа переменной символьного типа, вызывать функцию, которая бы проверила, есть ли лист с таким именем в книге или нет, если есть, то проводить требуемые операции с данными, иначе - пропуск (или делать что-нибудь альтернативное).
Добавлено: Для проверки наличия листа в книге можете воспользоваться [more=этой функцией]
Код: Function Is_sheet_exist(Sheet_name As String, book As Workbook, Worksheet_type As Long) As Boolean
' Worksheet_type.
' Can be one of xlWorksheet, xlExcel4MacroSheet, or xlExcel4IntlMacroSheet.
Dim current_sheet As Worksheet
Is_sheet_exist = True
For Each current_sheet In book.Worksheets
If current_sheet.Name = Sheet_name And current_sheet.Type = Worksheet_type Then Exit Function
Next current_sheet
Is_sheet_exist = False
End Function