Altere a linha de cópia de folha da seguinte forma:
Do While strFile <> ""
Set wbSource = Workbooks.Open(strDir & "\" & strFile)
wbSource.Sheets.Copy wbSink.Sheets(Sheets.Count)
wbSource.Close False
strFile = Dir()
Loop
(Esta é uma revisão de uma pergunta semelhante)
Eu geralmente importo uma pasta de arquivos .csv para a pasta de trabalho ativa (a pasta de trabalho com a macro), portanto, quero automatizar isso com o VBA.
Eu reuni o seguinte script, mas ele insere uma planilha em branco após cada arquivo .csv importado.
Sub ImportCSV()
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Select folder of .csv files."
.Show
strDir = .SelectedItems.Item(1)
End With
strFile = Dir(strDir & "\" & "*.csv")
Set wbSink = ThisWorkbook
Do While strFile <> ""
Set wbSource = Workbooks.Open(strDir & "\" & strFile)
wbSource.Sheets.Copy wbSink.Sheets.Add
wbSource.Close False
strFile = Dir()
Loop
End Sub
Ou seja, após a primeira planilha importada, ela adiciona "Planilha2" e, depois da próxima planilha importada, adiciona "Planilha3" e assim por diante. Qual é a correção?
Isso funcionaria, mas está usando copiar / colar
Sub ImportCSV()
Dim strFile As String
Dim strPath As String
Dim wkb As Workbook
Application.ScreenUpdating = False
strPath = "C:\"
strFile = Dir(strPath & "*.csv")
Do While strFile <> ""
Set wkb = Workbooks.Open(strPath & strFile)
ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
wkb.Sheets(1).UsedRange.Copy
ThisWorkbook.Sheets(Sheets.Count).Range("A1").Paste
wkb.Close
strFile = Dir
Loop
Application.ScreenUpdating = True
End Sub
Tags csv microsoft-excel vba