2016-04-03 194 views
0

我想將多個XLSX/XLS工作表導入到我的主工作簿的「臨時」工作表中,每個工作簿內容應該在最後一項後添加。Excel VBA - 導入多個xlsx工作表並追加到主工作簿表

這隻適用於一個文件,但我似乎無法找出循環遍歷所有選定工作簿的邏輯。另外,考慮到性能和速度,在選擇完畢後打開所有選定的工作簿是明智的選擇,還是應該在導入前一個文件之後打開它們?

希望你的幫助。

編輯: 爲了更精確一點,腳本的問題是我應該查看所有打開的工作簿的部分。建議任何人?

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中,它有一些「編譯器」錯誤,例如在「For Each Workbooks In 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

相關問題