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

Вход

Регистрация

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

 

= Мир MS Excel/On Error не спасает - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » On Error не спасает (Макросы/Sub)
On Error не спасает
Ignat161 Дата: Понедельник, 23.02.2015, 16:02 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день, ознакомление с VBA начал буквально вчера. Столкнулся с проблемой

Пытаюсь написать макрос, который будет копировать информацию со всех листов книги и вставлять на первый лист ALL. Кол-во листов и их названия будут всегда разные.
Чтобы макрос не выдавал ошибку и не прерывался натыкаясь на несуществующий лист, я попытался применить функцию On error, если ошибка, то переходим к следующему листу. Но он всё равно выдает ошибку, когда добирается до листа, которого нет.

Просьба помочь разобраться, и доступно объяснить в чём моя ошибка, только учусь, пока слабо разбираюсь даже в элементарном)
Заранее спасибо
К сообщению приложен файл: 6647515.xlsm (26.1 Kb)
 
Ответить
СообщениеДобрый день, ознакомление с VBA начал буквально вчера. Столкнулся с проблемой

Пытаюсь написать макрос, который будет копировать информацию со всех листов книги и вставлять на первый лист ALL. Кол-во листов и их названия будут всегда разные.
Чтобы макрос не выдавал ошибку и не прерывался натыкаясь на несуществующий лист, я попытался применить функцию On error, если ошибка, то переходим к следующему листу. Но он всё равно выдает ошибку, когда добирается до листа, которого нет.

Просьба помочь разобраться, и доступно объяснить в чём моя ошибка, только учусь, пока слабо разбираюсь даже в элементарном)
Заранее спасибо

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

Excel 2010
Причём ошибку выдает даже доходя до листа5, хотя лист5 в книге есть. Листа4 нет, но на нем почем-то не обрывается
 
Ответить
СообщениеПричём ошибку выдает даже доходя до листа5, хотя лист5 в книге есть. Листа4 нет, но на нем почем-то не обрывается

Автор - Ignat161
Дата добавления - 23.02.2015 в 16:04
_Boroda_ Дата: Понедельник, 23.02.2015, 16:21 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Посмотрите здесь
И вообще: Sheets(5) - это пятый по порядку слева направо лист, а Лист5 - это (если не исправлять ничего) лист, который был вставлен в книгу пятым (и не важно, где он находится).
Кстати, листы очень удобно перебирать в цикле.
Что-то типа вот так
[vba]
Код
Sub Макрос1()
     sc_ = ThisWorkbook.Sheets.Count
     For i = 1 To sc_
         If Sheets(i).Name <> "ALL" Then
             r1_ = Sheets("ALL").Range("A" & Rows.Count).End(xlUp).Row + 1
             With Sheets(i)
                 .Range(.Range("A8"), .Range("A8").SpecialCells(xlLastCell)).Copy Sheets("ALL").Range("A" & r1_)
             End With
         End If
     Next i
End Sub
[/vba]
К сообщению приложен файл: 6647515_1.xlsm (26.9 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПосмотрите здесь
И вообще: Sheets(5) - это пятый по порядку слева направо лист, а Лист5 - это (если не исправлять ничего) лист, который был вставлен в книгу пятым (и не важно, где он находится).
Кстати, листы очень удобно перебирать в цикле.
Что-то типа вот так
[vba]
Код
Sub Макрос1()
     sc_ = ThisWorkbook.Sheets.Count
     For i = 1 To sc_
         If Sheets(i).Name <> "ALL" Then
             r1_ = Sheets("ALL").Range("A" & Rows.Count).End(xlUp).Row + 1
             With Sheets(i)
                 .Range(.Range("A8"), .Range("A8").SpecialCells(xlLastCell)).Copy Sheets("ALL").Range("A" & r1_)
             End With
         End If
     Next i
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 23.02.2015 в 16:21
Leanna Дата: Понедельник, 23.02.2015, 16:27 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
Альтернативный вариант
[vba]
Код
Sub copy_rows()
'перебираем все листы в активной рабочей книге
For Each sh In ActiveWorkbook.Sheets
     'если попадается лист ALL то действий не производим.
     If sh.Name <> "ALL" Then
         'определяем последнюю заполненную строку на перебираемом листе
         lr = sh.Cells(Rows.Count, 1).End(xlUp).Row
         ' выделяем ряд с восьмого по последний
         sh.Rows("8:" & lr).Copy
         'определяем последнюю незаполненную строку на листа ALL
         k = Sheets("ALL").Cells(Rows.Count, 1).End(xlUp).Row + 1
         'вставляем данные
         Sheets("ALL").Rows(k).PasteSpecial Paste:=xlPasteValues
     End If
Next ' переход к следующему листу
End Sub
[/vba]
К сообщению приложен файл: copy_rows.xlsm (30.7 Kb)


Лучше день потерять, потом за пять минут долететь!
 
Ответить
СообщениеАльтернативный вариант
[vba]
Код
Sub copy_rows()
'перебираем все листы в активной рабочей книге
For Each sh In ActiveWorkbook.Sheets
     'если попадается лист ALL то действий не производим.
     If sh.Name <> "ALL" Then
         'определяем последнюю заполненную строку на перебираемом листе
         lr = sh.Cells(Rows.Count, 1).End(xlUp).Row
         ' выделяем ряд с восьмого по последний
         sh.Rows("8:" & lr).Copy
         'определяем последнюю незаполненную строку на листа ALL
         k = Sheets("ALL").Cells(Rows.Count, 1).End(xlUp).Row + 1
         'вставляем данные
         Sheets("ALL").Rows(k).PasteSpecial Paste:=xlPasteValues
     End If
Next ' переход к следующему листу
End Sub
[/vba]

Автор - Leanna
Дата добавления - 23.02.2015 в 16:27
Ignat161 Дата: Понедельник, 23.02.2015, 16:44 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо за помощь. Я понимаю, что мой код ни куда не годится, но это первый макрос, который я попробовал создать, подскажите, где там всё-таки ошибка?
 
Ответить
СообщениеСпасибо за помощь. Я понимаю, что мой код ни куда не годится, но это первый макрос, который я попробовал создать, подскажите, где там всё-таки ошибка?

Автор - Ignat161
Дата добавления - 23.02.2015 в 16:44
_Boroda_ Дата: Понедельник, 23.02.2015, 16:51 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так я ж написал
Sheets(5) - это пятый по порядку слева направо лист, а Лист5 - это (если не исправлять ничего) лист, который был вставлен в книгу пятым (и не важно, где он находится).


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак я ж написал
Sheets(5) - это пятый по порядку слева направо лист, а Лист5 - это (если не исправлять ничего) лист, который был вставлен в книгу пятым (и не важно, где он находится).

Автор - _Boroda_
Дата добавления - 23.02.2015 в 16:51
Leanna Дата: Понедельник, 23.02.2015, 16:57 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
Мне тоже не понятно. Там же стоит On Error GoTo Sheets6 . Почему на этой ошибке он не переходит на пункт Sheets6: ? Err.Clear не помогает


Лучше день потерять, потом за пять минут долететь!
 
Ответить
СообщениеМне тоже не понятно. Там же стоит On Error GoTo Sheets6 . Почему на этой ошибке он не переходит на пункт Sheets6: ? Err.Clear не помогает

Автор - Leanna
Дата добавления - 23.02.2015 в 16:57
_Boroda_ Дата: Понедельник, 23.02.2015, 17:50 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Вот отсюда

Цитата
Если ошибка возникает при активном обработчике ошибок (между возникновением ошибки и операторами Resume, Exit SubExit Function или Exit Property), обработчик ошибок в текущей процедуре не сможет обработать ошибку. Управление передается вызывающей процедуре.

Если у вызывающей процедуры есть включенный обработчик ошибок, он активируется для обработки ошибки. Если обработчик ошибок вызывающей процедуры уже активен, управление возвращается по цепочке предыдущим вызывающим процедурам до тех пор, пока не будет найден включенный, но неактивный обработчик ошибок. Если такой обработчик ошибок не найден, ошибка оказывается неустранимой в той точке, где она реально возникла.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВот отсюда

Цитата
Если ошибка возникает при активном обработчике ошибок (между возникновением ошибки и операторами Resume, Exit SubExit Function или Exit Property), обработчик ошибок в текущей процедуре не сможет обработать ошибку. Управление передается вызывающей процедуре.

Если у вызывающей процедуры есть включенный обработчик ошибок, он активируется для обработки ошибки. Если обработчик ошибок вызывающей процедуры уже активен, управление возвращается по цепочке предыдущим вызывающим процедурам до тех пор, пока не будет найден включенный, но неактивный обработчик ошибок. Если такой обработчик ошибок не найден, ошибка оказывается неустранимой в той точке, где она реально возникла.

Автор - _Boroda_
Дата добавления - 23.02.2015 в 17:50
82014 Дата: Понедельник, 23.02.2015, 19:22 | Сообщение № 9
Группа: Гости
On Error Resume Next
If Err Then Err.Clear: GoTo Sheets3
 
Ответить
СообщениеOn Error Resume Next
If Err Then Err.Clear: GoTo Sheets3

Автор - 82014
Дата добавления - 23.02.2015 в 19:22
Мир MS Excel » Вопросы и решения » Вопросы по VBA » On Error не спасает (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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