2014-02-21 22 views
0

我試圖尋找很多,但找不到滿意的答案。對不起,如果這是一個轉發。合併多個excel文件,同時保持頭文件只從第一個文件

我基本上想要的是將多個excel文件合併到一個工作簿中。我只想保留第一個excel文件的標題行,並忽略其餘excel文件的標題行(因爲它們都是相同的)。所以最終結果應該是來自第一個excel文件的Header +數據,並且從剩餘的Excel文件中我只需要數據行,而不是具有與第一個文件類似的列標題的第一行。 下面的副本粘貼所有excel文件中的所有行和列。感謝你們對我的幫助。

For wbCounter = 1 To UBound(books) 

       Set wbSource = oExcel.Workbooks.Open(books(wbCounter)) 
       For wsCounter = 1 To wbSource.Sheets.Count 
        Set wsSource = wbSource.Sheets(wsCounter) 

        If wsSource.Name Like selectSheetStr Then 
         emptySheet = True 

         If cbOptionIgnoreEmpty.Value = True And wsSource.UsedRange.Address = "$A$1" Then 
          emptySheet = True 
         Else 
          emptySheet = False 
         End If 

         If emptySheet = False Then 
          mergedWorksheetName = wsSource.Name 

          sheetExist = SheetExists(mergedWorksheetName, wbResult) 
          If (cbOptionAppendData.Value = True And sheetExist = True) Then 
           Set wsMergeResult = wbResult.Sheets(mergedWorksheetName) 
           wsSource.UsedRange.Copy 
           wsMergeResult.Cells(wsMergeResult.UsedRange.Rows.Count + 1, 1).Resize(wsSource.UsedRange.Rows.Count, wsSource.UsedRange.Columns.Count).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone 
           mergedWorksheetCount = mergedWorksheetCount + 1 
           'Name of Worksheet 
           wsResult.Cells(mergedWorksheetCount + 1, 1) = wsMergeResult.Name 
           'Fullpath of Workbook 
           wsResult.Cells(mergedWorksheetCount + 1, 2) = wbSource.FullName 
          Else 
           wsSource.Copy After:=wbResult.Sheets(wbResult.Sheets.Count) 
           mergedWorksheetCount = mergedWorksheetCount + 1 
           wsResult.Cells(mergedWorksheetCount + 1, 1) = .ActiveSheet.Name 
           wsResult.Cells(mergedWorksheetCount + 1, 2) = wbSource.FullName 
          End If 
         End If 
        End If 
       Next wsCounter 
       wbSource.Close SaveChanges:=False 
      Next wbCounter 

回答

0

嘗試更換線...

wsSource.UsedRange.Copy 

...與:

wsSource.UsedRange.Resize(wsSource.UsedRange.Rows.Count - 1, wsSource.UsedRange.Columns.Count).Offset(1, 0).Copy 

這應該複製使用的範圍減去第一行。

+0

謝謝索倫。它確實從其餘的Excel文件中刪除了列名。還有一件事要問你希望你不會介意,因爲我在我剩餘的Excel文件中有1行記錄,它是複製粘貼行兩次。所以第二張excel表格(只有一行記錄)中的記錄被複制兩次在master excel文件中(我的意思是最終合併的excel工作簿)。你有什麼想法,爲什麼會這樣?再次感謝您的幫助。 – Kashif77

+0

我很害怕我不會很激動地理解你的第二個問題。也許最好在一個新問題中描述這個問題? Pleace接受如果它爲你工作的答案。 –

+0

謝謝索倫。我會添加一個新問題。 – Kashif77

-1

此代碼將讓你的所有文件的路徑在一個特定的文件夾

Option Explicit 
Sub CountRows() 

    Dim MyObject As Scripting.FileSystemObject 
    Set MyObject = New Scripting.FileSystemObject 
    Dim mySource As Folder 
    Dim myFile As Scripting.File 

    Dim strPath As String 

    Set mySource = MyObject.GetFolder("D:\") ' or any other folder 
    For Each myFile In mySource.Files 
     strPath = myFile.Path 
    Next 
End Sub 

此代碼將打開這些工作簿和修改他們的細胞

dim wrkbook as workbook 
set wrkbook = workbooks.open(strPath) ' the path comes from the code above 
'modify the workbook 
wrkbook.worksheets.item(1).cells(1, 1) = "something" 
相關問題