2016-04-03 3 views
0

Я пытаюсь импортировать несколько листов XLSX/XLS в лист «temp» моей основной книги, каждый материал для книг должен быть добавлен после последней записи.Excel VBA - импортируйте несколько рабочих листов xlsx и добавьте в лист основной книги

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

Поблагодарите вашу помощь.

EDIT: Чтобы быть более точным, проблема со сценарием является частью, где я должен просматривать все открытые книги. Предложения кто-нибудь?

For Each Workbooks In lngCount 

    With Workbooks 
     .Sheets(1).Cells.Copy Destination:=MasterWB.Sheets("temp").Range("A65536").End(xlUp).Offset(1, 0) 
     .Close False 
    End With 

Next 

Полный VBA Код:

Sub import_XLS() 
Dim wb As Workbook 
Dim lngCount As Long 

' speed up by turning screenupdating off 
    Application.ScreenUpdating = False 

' set workbooks 
    Set MasterWB = ActiveWorkbook 

    With ActiveWorkbook.Sheets("temp") 
     .Visible = True 
     .Cells.Delete 
    End With 

' Open the file dialog 
    With Application.FileDialog(msoFileDialogOpen) 
     .InitialFileName = "" 
     .Title = "Please select the converted User Activity files for import" 
     .Filters.Add "Excel Files", "*.xls; *.xlsx", 1 
     '.Filters.Add "Excel Files", "*.xls", 1 
     .AllowMultiSelect = True 

     If .Show = -1 Then 
      ' Open the files 
      For lngCount = 1 To .SelectedItems.Count 
       Workbooks.Open .SelectedItems(lngCount) 
      Next lngCount 

      Else 
       Exit Sub 
     End If 

    End With 

' open selected workbook in read only and copy all cells of worksheet 1 

For Each Workbooks In lngCount 

    With Workbooks 
     .Sheets(1).Cells.Copy Destination:=MasterWB.Sheets("temp").Range("A65536").End(xlUp).Offset(1, 0) 
     .Close False 
    End With 

Next 

' hide temp sheet, close workbook without saving changes and free memory 
    'MasterWB.Sheets("temp").Visible = False 
    'wb.Close False 
    Set wb = Nothing 

End Sub 
+0

сделали вы действительно получили, что код работает? В моем VBE у него есть некоторые ошибки «компилятора», например, в строке «Для каждой книги в строке lngCount», где он не позволит вам перебирать что-либо, кроме коллекций или массивов. Я также предлагаю вам добавить оператор 'Option Explicit' в самом начале вашего модуля, чтобы он заставил вас объявить каждую переменную, которую вы используете. небольшая дополнительная работа будет вознаграждена, позволяя вам определить и устранить несоответствие каждого типа. – user3598756

+0

В самом начале я заявлял, что инструкция «Для каждой книги» не работает, вот почему я здесь для справки :) – Armitage2k

+0

ну, вы можете исправить и отладить ваш код в соответствии с моими комментариями. и, наконец, обновить его в поле кода вместе с возможными проблемами, оставленными – user3598756

ответ

1
Dim wb As Workbook 
.... 

For Each wb In Workbooks 
    with wb 
     if .name <>MasterWB.Name 
     ....  
    end with 
Next wb 
+0

есть ли способ игнорировать активную книгу (MasterWB)? С помощью этого решения он также рассмотрит текущую рабочую книгу, поскольку она также считается «открытой». – Armitage2k

+0

см. Правки. и не ясно, что вы беспокоитесь о «текущей активной книге»: это последняя, ​​которая была открыта во время предыдущего цикла «For lngCount = 1 To .SelectedItems.Count», поэтому с ним нужно иметь дело. – user3598756