Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обработки ошибок в VBA (двойное On Error GoTo) - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Обработки ошибок в VBA (двойное On Error GoTo)
slesarok Дата: Вторник, 12.12.2017, 01:58 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Ночи доброй всем!
Ругается на код, где я использую двойную проверку на ошибки, вот часть макроса (копирование листа из другой книги с использованием UserForms):
[vba]
Код
Public List
.....
           With ActiveWorkbook
On Error GoTo Error1
           Call List_copy ' выполняется Активация User формы, где из сплывающего списка необходимо выбрать название листа, который нужно копировать

           .Sheets(List).Copy before:=BazaWb.Sheets(1)
GoTo Ends:
Error1:
On Error GoTo Error2
            List = InputBox("Данный лист не найден, введите название листа вручную", "IO", "")
            .Sheets(List).Copy before:=BazaWb.Sheets(1)
GoTo Ends:
Error2:
MsgBox ("Дынный лист не найден, проверьте правильность написания и повторите процедуру") Exit Sub '? здесь процедуру заканчивать
Ends:
          End With
      Workbooks(oAwb).Close False    'Закрываем книгу
[/vba]

И вот здесь у меня ругается на 11 (.Sheets(List).Copy before:=BazaWb.Sheets(1)) строку. Вроде на мой (любительский) взгляд правильно. Может грамматика?
Run-time Error '9'
Subscript out ofrange

Если описать слови код, то будет так:
1. При начале процедуры открывается окно, где нужно выбрать файл, откуда копировать лист
2. После выбора файла вызывается List_copy (Это UserForm) так 6 кнопок и типовыми названиями листов (например Лист1, Лист2, Лист3 и тд)
3. При выборе Листа, которого макрос не нашел в этом файле предлагается ввести название листа вручную, вызывая InputBox
Вот до этого момента у меня все работало, но я решил еще добавить сообщение, при неправильном ручном вводе Листа и завершить процедуру...
Тут я и залип)
К сообщению приложен файл: Test_for_PE.xlsm (21.9 Kb)
 
Ответить
СообщениеНочи доброй всем!
Ругается на код, где я использую двойную проверку на ошибки, вот часть макроса (копирование листа из другой книги с использованием UserForms):
[vba]
Код
Public List
.....
           With ActiveWorkbook
On Error GoTo Error1
           Call List_copy ' выполняется Активация User формы, где из сплывающего списка необходимо выбрать название листа, который нужно копировать

           .Sheets(List).Copy before:=BazaWb.Sheets(1)
GoTo Ends:
Error1:
On Error GoTo Error2
            List = InputBox("Данный лист не найден, введите название листа вручную", "IO", "")
            .Sheets(List).Copy before:=BazaWb.Sheets(1)
GoTo Ends:
Error2:
MsgBox ("Дынный лист не найден, проверьте правильность написания и повторите процедуру") Exit Sub '? здесь процедуру заканчивать
Ends:
          End With
      Workbooks(oAwb).Close False    'Закрываем книгу
[/vba]

И вот здесь у меня ругается на 11 (.Sheets(List).Copy before:=BazaWb.Sheets(1)) строку. Вроде на мой (любительский) взгляд правильно. Может грамматика?
Run-time Error '9'
Subscript out ofrange

Если описать слови код, то будет так:
1. При начале процедуры открывается окно, где нужно выбрать файл, откуда копировать лист
2. После выбора файла вызывается List_copy (Это UserForm) так 6 кнопок и типовыми названиями листов (например Лист1, Лист2, Лист3 и тд)
3. При выборе Листа, которого макрос не нашел в этом файле предлагается ввести название листа вручную, вызывая InputBox
Вот до этого момента у меня все работало, но я решил еще добавить сообщение, при неправильном ручном вводе Листа и завершить процедуру...
Тут я и залип)

Автор - slesarok
Дата добавления - 12.12.2017 в 01:58
vikttur Дата: Вторник, 12.12.2017, 02:00 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

 
Ответить
СообщениеКросс
http://www.planetaexcel.ru/forum....or-goto

Автор - vikttur
Дата добавления - 12.12.2017 в 02:00
slesarok Дата: Вторник, 12.12.2017, 02:01 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Там никто не смог подсказать! Решил сюда обратиться
 
Ответить
СообщениеТам никто не смог подсказать! Решил сюда обратиться

Автор - slesarok
Дата добавления - 12.12.2017 в 02:01
китин Дата: Вторник, 12.12.2017, 07:40 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 7040
Репутация: 1080 ±
Замечаний: 0% ±

Excel 2007;2010;2016
а почему в Вопросы по Excel? про VBA есть своя ветка
[moder]Перенесла[/moder]


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852


Сообщение отредактировал Pelena - Вторник, 12.12.2017, 07:53
 
Ответить
Сообщениеа почему в Вопросы по Excel? про VBA есть своя ветка
[moder]Перенесла[/moder]

Автор - китин
Дата добавления - 12.12.2017 в 07:40
miver Дата: Вторник, 12.12.2017, 11:48 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
slesarok, Это так не работает!
После отлова ошибки нужно когда-то послать команду Resume или завершить макрос
Предлагаю исправить так:
[vba]
Код
Public List
.....
        With ActiveWorkbook
On Error GoTo Error1
        Call List_copy ' выполняется Активация User формы, где из сплывающего списка необходимо выбрать название листа, который нужно копировать

        .Sheets(List).Copy before:=BazaWb.Sheets(1)
GoTo Ends:
Error1:
On Error GoTo Error2
            List = InputBox("Данный лист не найден, введите название листа вручную", "IO", "")
            If List = "" Then GoTo Ends
            Resume
Error2:
MsgBox ("Дынный лист не найден, проверьте правильность написания и повторите процедуру") Exit Sub '? здесь процедуру заканчивать
Ends:
        End With
    Workbooks(oAwb).Close False    'Закрываем книгу
[/vba]


Сообщение отредактировал miver - Вторник, 12.12.2017, 11:49
 
Ответить
Сообщениеslesarok, Это так не работает!
После отлова ошибки нужно когда-то послать команду Resume или завершить макрос
Предлагаю исправить так:
[vba]
Код
Public List
.....
        With ActiveWorkbook
On Error GoTo Error1
        Call List_copy ' выполняется Активация User формы, где из сплывающего списка необходимо выбрать название листа, который нужно копировать

        .Sheets(List).Copy before:=BazaWb.Sheets(1)
GoTo Ends:
Error1:
On Error GoTo Error2
            List = InputBox("Данный лист не найден, введите название листа вручную", "IO", "")
            If List = "" Then GoTo Ends
            Resume
Error2:
MsgBox ("Дынный лист не найден, проверьте правильность написания и повторите процедуру") Exit Sub '? здесь процедуру заканчивать
Ends:
        End With
    Workbooks(oAwb).Close False    'Закрываем книгу
[/vba]

Автор - miver
Дата добавления - 12.12.2017 в 11:48
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!