EXCEL-Не копируется лист книги
Модератор: Naeel Maqsudov
Книга, состоящая из 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 результата не меняет. В чем может быть причина?
Спасибо.
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 результата не меняет. В чем может быть причина?
Спасибо.
Sheets("Лист2").Move After:=Sheets("Лист1")
Если листа 2 то Sheets(1) ничего не даст так как либо Ваш лист уже стоит вторым, либо он будет сам после себя вставать первым, то есть оставаться первым, как у Вас в скобочках и стоит.
Если листа 2 то Sheets(1) ничего не даст так как либо Ваш лист уже стоит вторым, либо он будет сам после себя вставать первым, то есть оставаться первым, как у Вас в скобочках и стоит.
-
- Сообщения: 526
- Зарегистрирован: 04 фев 2007, 18:37
- Откуда: Сургут
- Контактная информация:
Здравствуйте anval.
А Вы попробуйте спросить VBA, что не так?
Вместо MsgBox "После копирования"
If Not Err.Number = 0 Then MsgBox Err.Description 'даст Вам описание ошибки если таковая произошла.
Код Ваш не содержит ошибок(Dim_ok я думаю, погорячился
].
Евгений
А Вы попробуйте спросить VBA, что не так?

Вместо MsgBox "После копирования"
If Not Err.Number = 0 Then MsgBox Err.Description 'даст Вам описание ошибки если таковая произошла.
Код Ваш не содержит ошибок(Dim_ok я думаю, погорячился

Евгений
Да, извиняюсь, я не понял вопроса, посчитав что нужно просто переместить лист определённым образом, а не копию создавать
Евгений!
Дело в том, что управление на оператор, следующий за
Sheets("Лист2").Copy After:=Sheets(1)
просто не передается(если перейти в режим пошаговой отладки, то там явно это видно - при активации вышеназванной команды клавишей F8 курсор на следующую команду просто не переходит - снимается подсветка с этой команды, курсор остается на прежнем месте, т.е. на этой же строке, а при следующем нажатии F8 курсор "прыгает" на первую строку -
Sub CopySheet()
которая снова подсвечивается. Ну, а дальше все повторяется.
Вставка после
Sub CopySheet()
оператора обработки ошибки
On Error MsgBox Err.Number
тоже ничего не дала - управление на него не передавалось.
Дело в том, что управление на оператор, следующий за
Sheets("Лист2").Copy After:=Sheets(1)
просто не передается(если перейти в режим пошаговой отладки, то там явно это видно - при активации вышеназванной команды клавишей F8 курсор на следующую команду просто не переходит - снимается подсветка с этой команды, курсор остается на прежнем месте, т.е. на этой же строке, а при следующем нажатии F8 курсор "прыгает" на первую строку -
Sub CopySheet()
которая снова подсвечивается. Ну, а дальше все повторяется.
Вставка после
Sub CopySheet()
оператора обработки ошибки
On Error MsgBox Err.Number
тоже ничего не дала - управление на него не передавалось.
-
- Сообщения: 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
Обработчик у меня включался как раз до проблемной строки(это первый оператор макроса). Просто эта ситуация( выполнение оператора "Sheets("Лист2").Copy After:=Sheets(1)" не рассматривается EXCELем как ошибка(та, которая перехватывается "On Error")
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
если по Ф8 выделяется начало процедуры - это похоже на рекурсивный вызов её....

Игорь!
Так "неправильно" работает макрос только на отдельных машинах, на остальных процедура отрабатывается, как положено, Office один и тот же...
Нюанс - переход на начало процедуры происходит при повторном нажатии на оператор
Sheets("Лист2").Copy After:=Sheets(1)(см. макрос в начале темы),
при первом нажатии исчезает подсветка желтым текущей строки (в режиме отладки)
Так "неправильно" работает макрос только на отдельных машинах, на остальных процедура отрабатывается, как положено, Office один и тот же...
Нюанс - переход на начало процедуры происходит при повторном нажатии на оператор
Sheets("Лист2").Copy After:=Sheets(1)(см. макрос в начале темы),
при первом нажатии исчезает подсветка желтым текущей строки (в режиме отладки)
to anval,
что бы я пробывал в такой ситуации для начала:
1) вместо Sheets("Лист2").Copy After:=Sheets(1) вставить в код какую-нибудь строчку кода попроще или убрать вообще, проверить работу процедуцры в целом.
2) на неработающей машине в чистой новой книге попробывать отдельно ваш простейший код - может проблема в содержимом книги.
3) поискать различия в настройках Excel-ов на работающей и неработающей машинах
пробегитесь по вкладкам Сервис\Параметры - сделайте их скриншоты на работающей и неработающей машине и сравните.
Скриншоты удобно делать Alt+PrintScreen и набрасывать прямо на лист Excel
У меня ваш код работает
P.S.
После первого нажатия F8 процедура выполняется и уходит в небытие... но вроде заканчивает выполнение... где-то
При повторном нажатии на F8 VBE воспринимает нажатие как команду - прогнать Debug вашей текущей процедуры снова - это нормально.
что бы я пробывал в такой ситуации для начала:
1) вместо Sheets("Лист2").Copy After:=Sheets(1) вставить в код какую-нибудь строчку кода попроще или убрать вообще, проверить работу процедуцры в целом.
2) на неработающей машине в чистой новой книге попробывать отдельно ваш простейший код - может проблема в содержимом книги.
3) поискать различия в настройках Excel-ов на работающей и неработающей машинах
пробегитесь по вкладкам Сервис\Параметры - сделайте их скриншоты на работающей и неработающей машине и сравните.
Скриншоты удобно делать Alt+PrintScreen и набрасывать прямо на лист Excel
У меня ваш код работает

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