Импорт данных из множества рабочих книг и листов Excel в одну рабочую книгу / таблицу - PullRequest
2 голосов
/ 06 января 2011

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

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

Заранее большое спасибо,

Милли

Ответы [ 2 ]

3 голосов
/ 06 января 2011

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

Sub ImportWorkbooks(destination as workbook, importFolderPath As String)

    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    'Get the folder object associated with the directory
    Set objFolder = objFSO.GetFolder(importFolderPath)

    'Loop through the Files collection and import each workbook
    For Each objFile In objFolder.Files
        Dim source As Workbook
        Set source = Application.Workbooks.Open(objFile.Path, ReadOnly:=True)
        ImportWorkbook source, destination
        wb.Close
        Set wb = Nothing
    Next

    Set objFolder = Nothing
    Set objFile = Nothing
    Set objFSO = Nothing

End Sub

Sub ImportWorkbook(source As Workbook, destination as Workbook)
    Dim sheet As Worksheet

    'Import each worksheet
    For Each sheet In source.Sheets
        ImportWorksheet sheet, destination
    Next sheet
End Sub

Sub ImportWorksheet(sheet As Worksheet, destination as Workbook)

    'Perform your import logic for each sheet here (i.e. Copy from sheet and paste into a 
    'sheet into the provided workbook)

End Sub

Базовое использование для импорта в текущую рабочую книгу будет выглядеть примерно так:

ImportWorkbooks ThisWorkbook, "c:\path\to\folder\containing\workbooks\to\import"
1 голос
/ 06 января 2011

Это займет всего две вещи: массив с именами файлов рабочей книги, например,

 dim books
 books = array("book1.xls","book2.xls",....)

Тогда ваш код цикла выглядит примерно так:

dim myBk as Workbook
dim bkFile as string
For Each bkFile in books
   myBk = Workbooks.Open(bkFile, ReadOnly)
   myBk.Activate
   'Transfer cells from myBk to target workbook
   target.cells(--).Value = myBk.Sheets("myStuff").Cells(--) 
   ...
Next

Я не могу помочьВы с деталями.Вам нужно будет изменить аргумент target.cells для каждого прохода в цикле, чтобы изменить назначение данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...