2017-07-26 49 views
1

我在一個文件夾中有100多個文件。每個文件有3個列表,但只有1個包含數據的列表。我需要從每個文件中獲取這些數據,並將其合併到一個列表中的單個文件中。我爲它寫了一個子文件,但我不知道如何去選擇所需的範圍(它隨文件的不同而不同) - 與在Ctrl + Shift + left arrow + down arrow的鍵盤上一樣。我應該怎樣將它粘貼到結果工作簿中的第一個空行上,然後粘貼之前的數據?Excel vba:在一張紙上合併多個文件

Sub combine() 
     Application.ScreenUpdating = False 
     Application.DisplayAlerts = False 
     Application.Calculation = xlCalculationManual 

     Dim ExcelApp As Object 
     Set ExcelApp = CreateObject("Excel.Application") 
     ExcelApp.Visible = False 
     ExcelApp.ScreenUpdating = False 
     ExcelApp.DisplayAlerts = False 
     ExcelApp.EnableEvents = False 

     '**VARIABLES** 
     Dim folderPath As String 
     folderPath = "Y:\plan_graphs\final\mich_alco_test\files\" 

     'COUNT THE FILES 
     Dim totalFiles As Long 
     totalFiles = 0 
     Dim fileTitle As String 
     fileTitle = Dir(folderPath & "*.xl??") 
     Do While fileTitle <> "" 
      totalFiles = totalFiles + 1 
      fileTitle = Dir() 
     Loop 

     'OPENING FILES 
     Dim resultWorkbook As Workbook 
     Dim dataWorkbook As Workbook 
     Set resultWorkbook = ExcelApp.Application.Workbooks.Open("Y:\plan_graphs\final\mich_alco_test\result.xlsx") 


     fileTitle = Dir(folderPath & "*.xl??") 

     'FOR EACH FILE 
     Do While fileTitle <> "" 
      Set dataWorkbook = ExcelApp.Application.Workbooks.Open(folderPath & fileTitle) 
      dataWorkbook.Worksheets("List1").Range("A1").Select 
      dataWorkbook.Worksheets("List1").Selection.CurrentRegion.Select 


      `resultWorkbook.Range 
      fileTitle = Dir() 
     Loop 

    ExcelApp.Quit 
    Set ExcelApp = Nothing 
End Sub 
+0

爲什麼你當前的應用程序實例中創建一個新的應用程序實例? –

+0

@Robin Mackenzie讓它看不見。 – Ans

+0

當你談論一個列表時 - 你的意思是不同的工作表,或單個工作表或ListObject中的列嗎? –

回答

1

您可以在不使用VBA的情況下執行此操作。改用Get &轉換。
這裏有幾個步驟,讓你開始:

  1. 轉到數據標籤
  2. 在獲取&變換,挑選新的疑問 - 從文件 - 文件夾
  3. 選擇包含的文件夾所有100 +文件
  4. 選擇包含您的數據的選項卡
  5. 您幾乎在那裏。做你的最終修復(如果需要)
  6. 一旦你完成後,點擊關閉&負載
2

我可能誤解了這個問題,不幸的是,我不能作出評論。如果我錯誤地理解了這個問題,我會刪除。

,但我不知道如何去選擇周圍只需要

這表明你有數據的動態量,並希望使用Range搶的選擇範圍。

假如你知道這裏所說的數據所在的列位置(在這種情況下,我的名單開始於B2和我們知道它在哪裏結束,您可以使用Range動態地選擇所有的數據。

Dim rcell As Range 
Dim rng As Range 

Set rng = ActiveSheet.Range("B2", Range("B2").End(xlDown)) 

For Each rcell In rng.Cells 
    Debug.Print rcell.Value 
Next rcell 

End Sub 

首先,我們定義一個Range變量並將其分配給所述範圍起始於B2和使用.End(xlDown)我們可以選擇的範圍在最後條目結束。

進一步的閱讀上.End()看到here.

希望這會有所幫助。

+0

謝謝。「結束(xlDown)」是否模仿「Ctrl + Shift +向下箭頭」?我怎樣才能讓'End(xlDown)'跳轉到第101行,複製'「A3:F101」'的範圍? – Ans

+0

「*返回一個Range對象,它表示包含源範圍的區域末尾的單元格。*」如果數據從指定範圍開始到第101行結束,則此代碼將獲取所有值。所以是的,從某種意義上說:)如果你想獲得範圍'A3:F101',那麼只需指定:'ActiveSheet.Range(「A3:F101」)。Select' – Sam

+0

'Set rng = dataWorkbook.Worksheets 「List1」)。範圍(「A3:F3」,範圍(「A3」)。結束(xlDown))'訣竅? – Ans

相關問題