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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2010, 18:24   #1
andre48
Новичок
Джуниор
 
Регистрация: 08.03.2010
Сообщений: 2
По умолчанию Копирование файлов постранично

Здравствуйте, уважаемые! с праздником милые дамы (если такие тут есть)
Я недавно начал пытаться программировать, так что пожалуйста не смейтесь если что-нибудь ляпну.
Передо мной стоит задача - скопировать из одного файла Excel в другой таблицы, постранично, т.е: в исходном файле из листа1 копируется таблица в лист1 второго файла, из листа2 в лист2 и так 50 страниц.
для одной страницы я, почитав ваш прекрасный форум, сумел написать программу, а вот для всех 50 страниц не могу написать ничего работающего, кроме повторения 50 раз этого кода =))
возможно ли как-нибудь поизящнее решить такую проблему?
и насколько медленнее будет моя программа по сравнению с оптимизированной?
Вложения
Тип файла: zip 234.zip (13.1 Кб, 16 просмотров)
andre48 вне форума Ответить с цитированием
Старый 08.03.2010, 20:01   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте такой вариант:
Код:
Sub CopyAll()
    On Error Resume Next ' отключаем останов при возникновении ошибок
    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = "c:\": .FilterIndex = 3: .AllowMultiSelect = False
        If .Show = -1 Then Filename = .SelectedItems(1) Else Exit Sub
    End With

    Application.ScreenUpdating = False
    Dim wb1 As Workbook, sh1 As Worksheet, ra1 As Range

    Set wb1 = Workbooks.Open(Filename)
    If wb1 Is Nothing Then Exit Sub

    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Worksheets    ' перебираем все листы в текущей книге
        Err.Clear    ' сбрасываем ошибки
        Set sh1 = Nothing: Set ra1 = Nothing ' очищаем переменные
        
        Set sh1 = wb1.Worksheets(CStr(sh.Name))  ' ищем в открытой книге лист с таким же именем
        
        ' получаем диапазон для копирования
        Set ra1 = sh1.Range(sh1.[e6], sh1.Range("a" & sh1.Rows.Count).End(xlUp).Offset(1))
        
        ' копируем диапазон с листа открытой книги
        ' и вставляем на одноимённый лист текущей книги
        ra1.Copy sh.Range("b" & sh.Rows.Count).End(xlUp).Offset(1)
        
        If Err Then ' проверяем, произошли ли ошибки при копировании текущего листа
            Debug.Print "В книге """ & wb1.Name & """ нет листа с именем """ & sh.Name & """  - копирование не удалось"
        Else
            Debug.Print "Лист """ & sh.Name & """ удачно скопирован"
        End If
    Next sh
    
    wb1.Close False    ' закрываем открытую ранее книгу без сохранения изменений
End Sub
В окне Immediate (открывается по Ctrl + G) видим отчёт:
Цитата:
Лист "Лист1" удачно скопирован
В книге "Книга6.xls" нет листа с именем "Лист4" - копирование не удалось
В книге "Книга6.xls" нет листа с именем "Лист2" - копирование не удалось

Последний раз редактировалось EducatedFool; 08.03.2010 в 20:09.
EducatedFool вне форума Ответить с цитированием
Старый 08.03.2010, 22:14   #3
andre48
Новичок
Джуниор
 
Регистрация: 08.03.2010
Сообщений: 2
По умолчанию

большое спасибо!!! работает!
EducatedFool, Вы Мастер!
andre48 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование файлов. Leo20 Общие вопросы Delphi 6 13.11.2009 17:03
Копирование файлов critical Microsoft Office Excel 4 02.07.2009 14:45
Копирование файлов VadEr Помощь студентам 4 06.04.2009 18:49
Копирование файлов Artificial Помощь студентам 5 05.06.2008 18:42
копирование файлов matus Общие вопросы Delphi 2 07.11.2007 21:57