我不是程序员 - 但我需要/想要在Excel中编写一个命令,将多个.csv文件聚合到一个工作簿中的单独工作表中...它运行一次,并复制/粘贴一个.csv的内容文件,但然后错误输出此错误:
Runtime error '438':
Object does not support this property or method.
我把它缩小到这条线:
'paste it
ThisWorkbook.Worksheets(Sheets.Count).Range("A1").Paste
但是,由于我是大多数人的新手,我不确定该怎么做。到目前为止,我刚刚从网络上抓取了似乎适用的代码片段。
Private Sub CommandButton1_Click()
Dim strFile As String, strPath As String
Dim wkb As Workbook
'Change this path for your own file location:
strPath = "C:[FILE PATH HERE]"
'this returns an empty string "" if the file cannot be found and will error
if the folder is incorrect
strFile = Dir(strPath & "*.csv")
Do While strFile <> ""
'open the csv file and assign it to a variable so that we can easily
reference it later
Set wkb = Workbooks.Open(strPath & strFile)
'add a new worksheet at the end of the macro workbook to paste into
ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
'get the range and copy it
wkb.Sheets(1).UsedRange.Copy
Debug.Print (Sheets.Count)
'paste it
ThisWorkbook.Worksheets(Sheets.Count).Range("A1").Paste
'close the csv file
wkb.Close
'find the next file - Dir without parameters will look for the next file in the folder that matches the first Dir call
strFile = Dir
Loop
End Sub
答案 0 :(得分:0)
Sub Dougsloop()
Dim wbk As Workbook
Dim Filename As String
Dim path As String
Dim wsO As Workbook
Dim StartTime As Double
Dim SecondsElapsed As Double
Dim aRR As Variant
Dim rowC As Long
Dim colC As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
StartTime = Timer
path = "path to folder of files" & "\"
Filename = Dir(path & "*.csv??")
Set wsO = ThisWorkbook
wsO.Sheets(1).Select
Do While Len(Filename) > 0
DoEvents
Set wbk = Workbooks.Open(path & Filename, True, True)
aRR = wbk.Sheets(1).UsedRange
rowC = wbk.Sheets(1).UsedRange.Rows.Count
colC = wbk.Sheets(1).UsedRange.Columns.Count
wsO.ActiveSheet.Range(wsO.ActiveSheet.Cells(1, 1), wsO.ActiveSheet.Cells(rowC, colC)).Value2 = aRR
wbk.Close False
Filename = Dir
wsO.Sheets.Add After:=Worksheets(Worksheets.Count)
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
SecondsElapsed = Round(Timer - StartTime, 2)
MsgBox "This code ran successfully in " & SecondsElapsed & " seconds", vbInformation
End Sub