Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2015, 09:18   #1
Ogeris
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 87
По умолчанию При ошибке перейти к следующей части

Добрый день!

Задача макроса - подгрузить в один лист данные из нескольких экселевских файлов. Если нужный файл не открыт, то макрос переходит к следующему файлу. Если и тот не открыт, - к следующему.

Пытаюсь это реализовать через On error GoTo, но после первого отсутствующего файла выдаёт ошибку ((((

Вот кусок кода:

Код:
Sub Paste()
'
On Error GoTo 02
Windows("01.xls").Activate
Sheets(1).Range("A1").Select
Range("A1:AA" & Cells(Rows.Count, 1).End(xlUp).Row).Select
Selection.Copy
        
Windows("Отчёт.xls").Activate
ActiveSheet.Select
Range("A1").Select
ActiveSheet.Paste
Selection.UnMerge

02:
On Error GoTo 03
Windows("02.xls").Activate
Sheets(1).Range("A1").Select
Range("A1:AA" & Cells(Rows.Count, 1).End(xlUp).Row).Select
Selection.Copy

Windows("Отчёт.xls").Activate
ActiveSheet.Select
Range("A1").Select
iLastRow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
Cells(iLastRow + 2, ActiveCell.Column).Select
ActiveSheet.Paste
Selection.UnMerge

03:
Windows("03.xls").Activate
Sheets(1).Range("A1").Select
Range("A1:AA" & Cells(Rows.Count, 1).End(xlUp).Row).Select
Selection.Copy

Windows("Отчёт.xls").Activate
ActiveSheet.Select
Range("A1").Select
iLastRow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
Cells(iLastRow + 2, ActiveCell.Column).Select
ActiveSheet.Paste
Selection.UnMerge

End Sub
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 09.09.2015 в 09:40.
Ogeris вне форума Ответить с цитированием
Старый 09.09.2015, 09:56   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а так:

Код:
Sub Paste()
  Dim i As Long
  On Error Resume Next
  For i = 1 To 3
    Windows("0" & i & ".xls").Activate
    If Err Then
      Err.Clear
    Else
      With Workbooks("Отчёт.xls")
        Sheets(1).Range("A1:AA" & Cells(Rows.Count, 1).End(xlUp).Row).Copy _
        IIf(.Cells(.Rows.Count, 1).End(xlUp).Row = 1, .Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0))
        .Columns(1).UnMerge
      End With
    End If
  Next
  On Error GoTo 0
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 09.09.2015 в 11:02.
IgorGO вне форума Ответить с цитированием
Старый 09.09.2015, 10:04   #3
Ogeris
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 87
По умолчанию

Большое Спасибо!
Но я изменил названия файлов на "01.xls", "02.xls" и "03.xls" для примера, в жизни они имеют другие названия, например "Кб59.xls", "ГФ6.xls", "Л60.xls" и т.д.

Последний раз редактировалось Ogeris; 09.09.2015 в 10:18.
Ogeris вне форума Ответить с цитированием
Старый 09.09.2015, 10:23   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Тогда имена в массив, перебираем его
Код:
Windows(массив(i)).Activate
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.09.2015, 12:02   #5
Ogeris
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 87
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Тогда имена в массив, перебираем его
Код:
Windows(массив(i)).Activate
Спасибо!
А на что в этом случае заменить нижеследующее?

Код:
  
For i = 1 To 3
Ogeris вне форума Ответить с цитированием
Старый 09.09.2015, 12:05   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Код:
for i= lbound(массив) to ubound(массив)
- так будет универсально. А вообще можно от 0 до 2 перебирать для трёх значений.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.09.2015, 12:25   #7
Ogeris
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 87
По умолчанию

Вот так?

Код:
Sub Paste()
  Dim i As Long
  On Error Resume Next
  For i = LBound(массив) To UBound(массив)
    Windows(массив(i)).Activate
    If Err Then
      Err.Clear
    Else
      With Workbooks("Отчет.xls")
        Sheets(1).Range("A1:AA" & Cells(Rows.Count, 1).End(xlUp).Row).Copy _
        IIf(.Cells(.Rows.Count, 1).End(xlUp).Row = 1, .Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0))
        .Columns(1).UnMerge
      End With
    End If
  Next
  On Error GoTo 0
End Sub
Ogeris вне форума Ответить с цитированием
Старый 09.09.2015, 12:30   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Да.
Только где заполнение массива имён файлов?
А это можно делать по-разному - в коде, с листа, из текстового файла, запросом у пользователя...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.09.2015, 12:52   #9
Ogeris
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 87
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Да.
Только где заполнение массива имён файлов?
А это можно делать по-разному - в коде, с листа, из текстового файла, запросом у пользователя...
Если прописывать в коде (список из 18 наименований), то как это может выглядеть? Заранее спасибо!
Ogeris вне форума Ответить с цитированием
Старый 09.09.2015, 12:57   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Код:
массив=array("Кб59.xls", "ГФ6.xls", "Л60.xls") 'и т.д.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 09.09.2015 в 12:59.
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не показывать сообщение об ошибке, при подключении. Denutrror Работа с сетью в Delphi 3 09.07.2011 15:10
Помигать прямоугольником вокруг компонента при ошибке. Almaas Помощь студентам 1 15.12.2010 09:38
Сообщение об ошибке при вычислении длины строки vedro-compota Общие вопросы Delphi 24 17.05.2010 16:23
Indy, выход при ошибке подключения к прокси ArtInt Работа с сетью в Delphi 3 11.02.2010 16:15
Закрыть программу, при ошибке Dr.Badnezz Общие вопросы Delphi 7 16.01.2009 00:32