EXCEL-Не копируется лист книги

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

anval
Сообщения: 98
Зарегистрирован: 09 ноя 2004, 10:06

Книга, состоящая из 2-ух листов – «Лист1» и «Лист2», содержит макрос

Sub CopySheet()
MsgBox "До копирования"
Sheets("Лист2").Copy After:=Sheets(1)
MsgBox "После копирования"
End Sub

В результате выполнения этого макроса появляется третий лист с именем «Лист2 (2)» - это при нормальной работе макроса. На некоторых же машинах сети выполнение макроса ничего не меняет, при этом сообщение "После копирования" также не появляется на экране. При отладке в пошаговом режиме видно следующее. Если текущей является строка с командой «Sheets("Лист2").Copy After:=Sheets(1)» (она выделена желтым цветом), то после нажатия на клавишу “F8” выделение цветом пропадает, местоположение курсора остается прежним, а очередное нажатие на “F8” переводит курсор на строку
«Sub CopySheet(). Работаю в среде MS Office 2003. Переустановка Office результата не меняет. В чем может быть причина?
Спасибо.
Dim_ok
Сообщения: 51
Зарегистрирован: 03 июл 2007, 09:17

Sheets("Лист2").Move After:=Sheets("Лист1")
Если листа 2 то Sheets(1) ничего не даст так как либо Ваш лист уже стоит вторым, либо он будет сам после себя вставать первым, то есть оставаться первым, как у Вас в скобочках и стоит.
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте anval.
А Вы попробуйте спросить VBA, что не так? ;)
Вместо MsgBox "После копирования"
If Not Err.Number = 0 Then MsgBox Err.Description 'даст Вам описание ошибки если таковая произошла.
Код Ваш не содержит ошибок(Dim_ok я думаю, погорячился :rolleyes: ].
Евгений
Dim_ok
Сообщения: 51
Зарегистрирован: 03 июл 2007, 09:17

Да, извиняюсь, я не понял вопроса, посчитав что нужно просто переместить лист определённым образом, а не копию создавать
anval
Сообщения: 98
Зарегистрирован: 09 ноя 2004, 10:06

Евгений!
Дело в том, что управление на оператор, следующий за
Sheets("Лист2").Copy After:=Sheets(1)

просто не передается(если перейти в режим пошаговой отладки, то там явно это видно - при активации вышеназванной команды клавишей F8 курсор на следующую команду просто не переходит - снимается подсветка с этой команды, курсор остается на прежнем месте, т.е. на этой же строке, а при следующем нажатии F8 курсор "прыгает" на первую строку -
Sub CopySheet()
которая снова подсвечивается. Ну, а дальше все повторяется.
Вставка после
Sub CopySheet()
оператора обработки ошибки
On Error MsgBox Err.Number
тоже ничего не дала - управление на него не передавалось.
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте anval.
Возможно стоит включить обработчик ошибок до строки ее генерирующей.
Проверьте последовательность строк Вашего кода.

Код: Выделить всё

Sub ...
On Error Resume Next 'включается обработчик
...
Sheets("Лист2").Copy After:=Sheets(1) 'строка вызывающая ошибку
If Not Err.Number = 0 Then ...   'проверка ошибки
...
End Sub
Евгений.
anval
Сообщения: 98
Зарегистрирован: 09 ноя 2004, 10:06

Обработчик у меня включался как раз до проблемной строки(это первый оператор макроса). Просто эта ситуация( выполнение оператора "Sheets("Лист2").Copy After:=Sheets(1)" не рассматривается EXCELем как ошибка(та, которая перехватывается "On Error")
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

если по Ф8 выделяется начало процедуры - это похоже на рекурсивный вызов её....
Изображение
anval
Сообщения: 98
Зарегистрирован: 09 ноя 2004, 10:06

Игорь!
Так "неправильно" работает макрос только на отдельных машинах, на остальных процедура отрабатывается, как положено, Office один и тот же...
Нюанс - переход на начало процедуры происходит при повторном нажатии на оператор
Sheets("Лист2").Copy After:=Sheets(1)(см. макрос в начале темы),
при первом нажатии исчезает подсветка желтым текущей строки (в режиме отладки)
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

to anval,
что бы я пробывал в такой ситуации для начала:

1) вместо Sheets("Лист2").Copy After:=Sheets(1) вставить в код какую-нибудь строчку кода попроще или убрать вообще, проверить работу процедуцры в целом.
2) на неработающей машине в чистой новой книге попробывать отдельно ваш простейший код - может проблема в содержимом книги.
3) поискать различия в настройках Excel-ов на работающей и неработающей машинах
пробегитесь по вкладкам Сервис\Параметры - сделайте их скриншоты на работающей и неработающей машине и сравните.
Скриншоты удобно делать Alt+PrintScreen и набрасывать прямо на лист Excel

У меня ваш код работает :)

P.S.
После первого нажатия F8 процедура выполняется и уходит в небытие... но вроде заканчивает выполнение... где-то
При повторном нажатии на F8 VBE воспринимает нажатие как команду - прогнать Debug вашей текущей процедуры снова - это нормально.
Ответить