2014-12-08 2 views
-1

Мне нужно создать консолидированную книгу, которая открывает другие файлы Excel, копирует и вставляет некоторые таблицы.VBA открыть переменные файлы Excel

Проблема в том, что количество этих файлов excel будет меняться, а также их имена.

Например, я мог бы иметь эти файлы в течение одной недели: файла А файла B файла C

и эти другие файлы через неделю после того, как: файла B файл C файл D файла E

Укрепленная рабочая книга excel должна иметь возможность открывать все эти файлы, не изменяя каждый раз код VBA.

У вас есть идея? Пожалуйста, напишите несколько строк кода, если у вас есть хорошая идея

Спасибо

+0

Файлы соответствуют следующему шаблону в названии? все ли они в какой-либо конкретной папке? – Raugmor

+1

Как работает этот сайт, вы * должны писать код, и мы можем помочь с этим кодом. Мы не собираемся писать это для вас. –

+1

- файлы всегда в одном каталоге? и удаляется, когда это делается? если это так, вы можете итерировать каждый файл в каталоге по одному и выполнять требуемую обработку. – xQbert

ответ

0

Хорошо, спасибо за предложение. Я создал петлю в каталоге, и я отправлю решение для справки в будущем.

Dim ws1 As Worksheet 
Dim wb As Workbook 
Dim myPath As String 
Dim myFile As String 
Dim myExtension As String 
Dim FldrPicker As FileDialog 

Set ws1 = Worksheets(1) 

Application.ScreenUpdating = False 

myPath = "C:\Desktop\Common Folder Test\" 

myExtension = "*.xls" 

myFile = Dir(myPath & myExtension) 

Set wb2 = Workbooks("Consolidated data.xlsm") 
Set ws1 = Worksheets(1) 

r2 = 1 
Do While myFile <> "" 

Set wb = Workbooks.Open(Filename:=myPath & myFile) 
i = 2 

Do While i <= 4 
    r = 3 
    Do While wb.Worksheets(i).Cells(r, 3) <> "" 
    r = r + 1 
    Loop 
    r = r - 1 

    c = 1 
    Do While wb.Worksheets(i).Cells(2, c) <> "" 
    c = c + 1 
    Loop 
    c = c - 1 

    wb.Worksheets(i).Range(wb.Worksheets(i).Cells(2, 1), wb.Worksheets(i).Cells(r, c)).Copy 
    ws1.Cells(r2, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats 

    i = i + 1 
    r2 = r2 + r - 1 

Loop 

wb.Application.CutCopyMode = False 
wb.Close SaveChanges:=False 
myFile = Dir 
Loop 

MsgBox "Task Complete!" 

Application.ScreenUpdating = True 
Смежные вопросы