2012-10-16 53 views
0

使用下面的代碼,我可以同時瀏覽多個excel文件,並將它們粘貼在單張紙上,這樣我的問題就是複製包括它們的標題在內的所有內容,但事情是我只想要它將第一個文件複製到頭文件中,其餘的文件必須只複製沒有聽到的數據,並將它們粘貼到彼此之下,因爲它們的頭文件都是相同的。Insert Table without Headers

例如:EG1 名字,姓氏,AGE
Kgotso,史密斯,20

EG2 名字,姓氏,AGE

布賴恩,棕色,32

結果:NAME ,SURNAME,AGE

Kgotso,Smith,20

布賴恩,棕色,32

Sub Button4_Click() 
    Dim fileStr As Variant 
    Dim wbk1 As Workbook, wbk2 As Workbook 
    Dim ws1 As Worksheet 
    fileStr = Application.GetOpenFilename(FileFilter:="microsoft excel files (*.xlsx), *.xlsx", Title:="Get File", MultiSelect:=True) 
    Set wbk1 = ActiveWorkbook 
    Set ws1 = wbk1.Sheets("Sheet3") 

    For i = 1 To UBound(fileStr) 
    MsgBox fileStr(i), , GetFileName(CStr(fileStr(i))) 
    Set wbk2 = Workbooks.Open(fileStr(i)) 
    wbk2.Sheets(1).UsedRange.Copy ws1.Cells(ws1.Range("A" & Rows.Count).End(xlUp).Row + 2, 1) 
    wbk2.Close 
    Next i 

    End Sub 

回答

2

這將是我的快速嘗試這樣的:

Sub Button4_Click() 
Dim fileStr As Variant 
Dim wbk1 As Workbook, wbk2 As Workbook 
Dim ws1 As Worksheet 
fileStr = Application.GetOpenFilename(FileFilter:="microsoft excel files (*.xlsx), *.xlsx", Title:="Get File", MultiSelect:=True) 
Set wbk1 = ActiveWorkbook 
Set ws1 = wbk1.Sheets("Sheet3") 

'handling first file seperately 
MsgBox fileStr(1), , GetFileName(CStr(fileStr(1))) 
Set wbk2 = Workbooks.Open(fileStr(1)) 
wbk2.Sheets(1).UsedRange.Copy ws1.Cells(ws1.Range("A" & Rows.Count).End(xlUp).Row + 2, 1) 
wbk2.Close 

For i = 2 To UBound(fileStr) 
MsgBox fileStr(i), , GetFileName(CStr(fileStr(i))) 
Set wbk2 = Workbooks.Open(fileStr(i)) 
'using offset to skip the header - not the best solution, but a quick one 
wbk2.Sheets(1).UsedRange.Offset(1,0).Copy ws1.Cells(ws1.Range("A" & Rows.Count).End(xlUp).Row + 2, 1) 
wbk2.Close 
Next i 

End Sub 
+0

由於它工作Perfect.One件事怎麼能我讓代碼在粘貼時創建額外的列,並在該列中寫入導入文件的名稱? – Cwala

+0

你可以做一些類似'Range(「A1:A30」)= filestr' - 只需將範圍(「A1:A30」)替換爲符合你需要的範圍。 – Jook

2

試試這個

If i = 1 then 
    ' Do your copy as is 
Else 
    ' Offset past firt row 
    wbk2.Sheets(1).UsedRange.Offset(1, 0).Copy ... 
    ' This will copy one blank line too 
    ' Too avoid this extra line use instead 
    Set rng2 = wbk2.Sheets(1).UsedRange.Offset(1, 0) 
    Set rng2 = rng2.Resize(rng2.Rows.Count - 1) 
    rng2.Copy ... 
End If