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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2009, 10:21   #1
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию Подстановка имен книг

Необходим сбор данных из нескольких книг в одну. Код написан, все супер, только начала выскакивать ошибка
Compile error: Procedure too large
Хочу его уменьшить. Такой код:
Код:
    With ThisWorkbook.Worksheets(13).UsedRange: N = .Row + .Rows.Count - 1: End With
    Application.ScreenUpdating = False
    Filename = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "mh.xlsx")
    With Workbooks.Open(Filename, , True)
        .Worksheets(1).Unprotect
        .Worksheets(13).UsedRange.Copy ThisWorkbook.Worksheets(13).Cells(N + 1, "A")
        For i = 1 To 10
            ThisWorkbook.Worksheets(13).Rows(N + 1).Delete Shift:=xlUp
        Next
        .Close False
    End With
повторяется много раз для разных имен книг(соответсвенно меняется только один параметр). Подскажите пожалуйста, возможно ли в каком-нибудь массивчике записать имена книг и затем в цикле подставлять имена книг.
То есть примерно так:
Код:
Names[mn,mh,hg,df,fg,gh,ty]
For i=1 to 10
    With ThisWorkbook.Worksheets(13).UsedRange: N = .Row + .Rows.Count - 1: End With
    Application.ScreenUpdating = False
    Filename = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "%NAMES[i].xlsx%")
    With Workbooks.Open(Filename, , True)
        .Worksheets(1).Unprotect
        .Worksheets(13).UsedRange.Copy ThisWorkbook.Worksheets(13).Cells(N + 1, "A")
        For i = 1 To 10
            ThisWorkbook.Worksheets(13).Rows(N + 1).Delete Shift:=xlUp
        Next
        .Close False
    End With
Next
mephist вне форума Ответить с цитированием
Старый 20.07.2009, 10:50   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Попробуйте так
Код:
Dim asFileNames, li as long
asFileNames = Array("Файл1","Файл2","Файл3","Файл4")
For li = lBound(asFileNames) to Ubound(asFileNames)
    With ThisWorkbook.Worksheets(13).UsedRange: N = .Row + .Rows.Count - 1: End With
    Application.ScreenUpdating = False
    Filename = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, asFileNames(li) & ".xlsx")
    With Workbooks.Open(Filename, , True)
        .Worksheets(1).Unprotect
        .Worksheets(13).UsedRange.Copy ThisWorkbook.Worksheets(13).Cells(N + 1, "A")
        For i = 1 To 10
            ThisWorkbook.Worksheets(13).Rows(N + 1).Delete Shift:=xlUp
        Next
        .Close False
    End With
Next li
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 20.07.2009, 11:16   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
возможно ли в каком-нибудь массивчике записать имена книг и затем в цикле подставлять имена книг
они уже в коллекции Workbooks, если открыты.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическая подстановка значения. Baloo007 Microsoft Office Excel 2 08.07.2009 10:37
Подстановка значений при наборе kopoba БД в Delphi 4 02.06.2009 10:34
Подстановка значений в таблицу по условию mchip Microsoft Office Access 15 01.07.2008 09:54
Сравнение и подстановка tsasha1 Microsoft Office Excel 2 08.04.2008 14:47
Автоматическая подстановка последнего значения d_yure Microsoft Office Excel 9 28.12.2007 08:30