2017-07-14 193 views
0

我想拉入一組選定的.csv文件,然後將每個文件添加到工作簿的各自工作表中,以將所有數據合併到一個Excel工作簿中。 我無法爲每張表單上的文件名稱命名錶單。我搜索了很多,並有各種評論的方式,我嘗試過,沒有工作。這是我到目前爲止:將.csv文件合併到一個工作簿中的多個工作表中

Sub R_AnalysisMerger() 
Dim WSA As Object 
Dim bookList As Workbook 
Dim SelectedFiles() As Variant 
Dim NFile As Long 
Dim FileName As String 

Application.ScreenUpdating = False 

'change folder path of excel files here 
SelectedFiles = Application.GetOpenFilename(filefilter:="Excel Files (*.csv*), *.csv*", MultiSelect:=True) 

For NFile = LBound(SelectedFiles) To UBound(SelectedFiles) 


    FileName = SelectedFiles(NFile) 
    Set bookList = Workbooks.Open(FileName) 
    Set WSA = ThisWorkbook.Worksheets.Add 
    'ActiveSheet.Name = Left(FileName, 31) 
    'ActiveWorksheet.Name.Add Name:= FileName 
    'ActiveWorkbook.Name Name:=FileName 
    'ThisWorkbook.Sheets.Name.Add (FileName) 

    'Change " A1" to the starting point for each file. 
    'Also change "A" column on "A10000" to the same column as start point 
    Range("A1:IV" & Range("A100000").End(xlUp).Row).Copy 
    ThisWorkbook.Worksheets(1).Activate 

    'Column 
    Range("A100000").End(xlUp).Offset(0, 0).PasteSpecial 
    Application.CutCopyMode = False 
    Cells.EntireColumn.AutoFit 
    bookList.Close 
    'ActiveWorkbook.Close 

Next 
Sheets("Sheet1").Select 
Range("A1").Select 

End Sub 
+0

只需重命名新的工作表對象:'WSA.Name =左(文件名,31)' – Parfait

回答

1

使用變體很容易。

Sub R_AnalysisMerger() 
    Dim WSA As Worksheet 
    Dim bookList As Workbook 
    Dim SelectedFiles() As Variant 
    Dim NFile As Long 
    Dim FileName As String 
    Dim Ws As Worksheet, vDB As Variant, rngT As Range 

    Application.ScreenUpdating = False 


    Set Ws = ThisWorkbook.Sheets(1) 
    Ws.UsedRange.Clear 
    'change folder path of excel files here 
    SelectedFiles = Application.GetOpenFilename(filefilter:="Excel Files (*.csv*), *.csv*", MultiSelect:=True) 


    For NFile = LBound(SelectedFiles) To UBound(SelectedFiles) 
     FileName = SelectedFiles(NFile) 
     Set bookList = Workbooks.Open(FileName, Format:=2) 
     Set WSA = bookList.Sheets(1) 
     With WSA 
      vDB = .UsedRange 
      Set rngT = Ws.Range("a" & Rows.Count).End(xlUp)(2) 
      If rngT.Row = 2 Then Set rngT = Ws.Range("a1") 
      rngT.Resize(UBound(vDB, 1), UBound(vDB, 2)) = vDB 

      bookList.Close (0) 
     End With 
    Next 
    Application.ScreenUpdating = True 
    Ws.Range("A1").Select 

End Sub 

另一個是

Sub R_AnalysisMerger2() 
    Dim WSA As Worksheet 
    Dim bookList As Workbook 
    Dim SelectedFiles As Variant 
    Dim NFile As Long 
    Dim FileName As String 
    Dim Ws As Worksheet, vDB As Variant, rngT As Range 
    Dim vFn, myFn As String 

    Application.ScreenUpdating = False 

    SelectedFiles = Application.GetOpenFilename(filefilter:="Excel Files (*.csv*), *.csv*", MultiSelect:=True) 
    If IsEmpty(SelectedFilesL) Then Exit Sub 

    For NFile = LBound(SelectedFiles) To UBound(SelectedFiles) 
     FileName = SelectedFiles(NFile) 
     vFn = Split(FileName, "\") 
     myFn = vFn(UBound(vFn)) 
     myFn = Replace(myFn, ".csv", "") 
     Set bookList = Workbooks.Open(FileName, Format:=2) 
     Set WSA = bookList.Sheets(1) 
     vDB = WSA.UsedRange 
     bookList.Close (0) 
     Set Ws = Sheets.Add(after:=Sheets(Sheets.Count)) 
     ActiveSheet.Name = myFn 
     Ws.Range("a1").Resize(UBound(vDB, 1), UBound(vDB, 2)) = vDB 
    Next 
    Application.ScreenUpdating = True 


End Sub 
+0

感謝您迴應並更新的代碼,不幸的是你的代碼更新將文件放到一張紙上而不是多張紙上。我將附上一些文件,以及我目前所擁有的文件,以便更好地瞭解我需要做的事情。目前,我只是將文件1-19重新寫入文件.csv名稱,我手動搜索並找到了marco。我想在每個新工作表添加時自動從文件中提取這些名稱。 – JoshTosh92

+0

合併我現在有了,請按照數字並選擇示例數據中的文件。 https://drive.google.com/file/d/0B3cLWpLkPaglS09IaGVSVDczRDQ/view?usp=sharing – JoshTosh92

+0

示例數據:https://drive.google.com/open?id = 0B3cLWpLkPaglNk96WWlZTzllcGs – JoshTosh92

相關問題