Excel VBA - 索引和匹配 vba 错误
Excel VBA - index and match vba error
我是 VBA 的新手,工作表函数有问题。我不确定我是否正确使用它,因为我一直收到运行时错误“1004”:“_Global”的方法 'Range' 失败。下面是我的 VBA 希望大家能帮帮我。谢谢!
Sub MergeAllWorkbooks2()
Dim FolderPath As String
Dim X As Long
Dim i As Long
Dim FileName As String
Dim WorkBk As Workbook
Dim SourceRange As Range
Dim DestRange As Range
'path of directory
FolderPath = "C:\Users\XXXX\Desktop\New folder\XXXXX\"
' Setting starting points
X = 3
' Call Dir the first time, pointing it to all Excel files in the folder path.
FileName = Dir(FolderPath & "*.xl*")
' Loop until Dir returns an empty string.
Do Until FileName = ""
' Open a workbook in the folder
Set WorkBk = Workbooks.Open(FolderPath & FileName)
'Set the source range
Set SourceRange = WorkBk.Worksheets(1).Range("C2:C7")
' Set the destination range
Workbooks("Summary.xlsm").Worksheets("Sheet1").Activate
Set DestRange = Workbooks("Summary.xlsm").Worksheets("Sheet1").Range(Cells(4, X), Cells(9, X))
' Copy over the values from the source to the destination.
DestRange.Value = SourceRange.Value
'Get hourly from each file
For i = 12 To 8762
Workbooks("Summary.xlsm").Worksheets("Sheet1").Range(Cells(12, X), Range(Cells(12, X).End(xlDown))) = _
Application.WorksheetFunction.Index(WorkBk.Worksheets(2).Range("B3:B8762"), Application.Match(Workbooks("Summary.xlsm").Worksheets("Sheet1").Range(Cells(i, X)), WorkBk.Worksheets(2).Range("A3:A8763")), 0)
Next i
' Increase NColumn so that we know where to copy data next.
X = X + DestRange.Columns.Count
' Close the source workbook without saving changes.
WorkBk.Close savechanges:=False
' Use Dir to get the next file name.
FileName = Dir()
Loop
' Range("C4:C9", Range("C4:C9").End(xlToRight)).Sort key1:=Range("b7"), key2:=Range("b8"), key3:=Range("b9"), _
' order1:=xlAscending, Orientation:=xlLeftToRight
endTime = Now()
totTimeSec = Round(((endTime - startTime) * (24 * CLng(3600))), 1)
MsgBox (totTimeSec & " seconds")
End Sub
我还没有完成所有代码检查问题,但主要问题是:
- 您没有正确限定您的 Range 和 Cells 调用
工作表对象;
- 您不能使用
Range(cells(x, y))
除非
Cells(x, y)
处单元格的值是一个范围的地址。
- 您在索引/匹配部分中的括号不正确。
试试这个:
Sub MergeAllWorkbooks2()
Dim FolderPath As String
Dim X As Long
Dim i As Long
Dim FileName As String
Dim WorkBk As Workbook
Dim SourceRange As Range
Dim DestRange As Range
Dim wsDest As Worksheet
'path of directory
FolderPath = "C:\Users\XXXX\Desktop\New folder\XXXXX\"
' Setting starting points
X = 3
' Call Dir the first time, pointing it to all Excel files in the folder path.
FileName = Dir(FolderPath & "*.xl*")
' Loop until Dir returns an empty string.
Do Until FileName = ""
' Open a workbook in the folder
Set WorkBk = Workbooks.Open(FolderPath & FileName)
'Set the source range
Set SourceRange = WorkBk.Worksheets(1).Range("C2:C7")
' Set the destination range
Set wsDest = Workbooks("Summary.xlsm").Worksheets("Sheet1")
Set DestRange = wsDest.Range(wsDest.Cells(4, X), wsDest.Cells(9, X))
' Copy over the values from the source to the destination.
DestRange.Value = SourceRange.Value
'Get hourly from each file
For i = 12 To 8762
wsDest.Range(wsDest.Cells(12, X), wsDest.Cells(12, X).End(xlDown)) = _
Application.WorksheetFunction.Index(WorkBk.Worksheets(2).Range("B3:B8762"), Application.Match(wsDest.Cells(i, X), WorkBk.Worksheets(2).Range("A3:A8763"), 0), 1)
Next i
' Increase NColumn so that we know where to copy data next.
X = X + DestRange.Columns.Count
' Close the source workbook without saving changes.
WorkBk.Close savechanges:=False
' Use Dir to get the next file name.
FileName = Dir()
Loop
' Range("C4:C9", Range("C4:C9").End(xlToRight)).Sort key1:=Range("b7"), key2:=Range("b8"), key3:=Range("b9"), _
' order1:=xlAscending, Orientation:=xlLeftToRight
endTime = Now()
totTimeSec = Round(((endTime - startTime) * (24 * CLng(3600))), 1)
MsgBox (totTimeSec & " seconds")
End Sub
我是 VBA 的新手,工作表函数有问题。我不确定我是否正确使用它,因为我一直收到运行时错误“1004”:“_Global”的方法 'Range' 失败。下面是我的 VBA 希望大家能帮帮我。谢谢!
Sub MergeAllWorkbooks2()
Dim FolderPath As String
Dim X As Long
Dim i As Long
Dim FileName As String
Dim WorkBk As Workbook
Dim SourceRange As Range
Dim DestRange As Range
'path of directory
FolderPath = "C:\Users\XXXX\Desktop\New folder\XXXXX\"
' Setting starting points
X = 3
' Call Dir the first time, pointing it to all Excel files in the folder path.
FileName = Dir(FolderPath & "*.xl*")
' Loop until Dir returns an empty string.
Do Until FileName = ""
' Open a workbook in the folder
Set WorkBk = Workbooks.Open(FolderPath & FileName)
'Set the source range
Set SourceRange = WorkBk.Worksheets(1).Range("C2:C7")
' Set the destination range
Workbooks("Summary.xlsm").Worksheets("Sheet1").Activate
Set DestRange = Workbooks("Summary.xlsm").Worksheets("Sheet1").Range(Cells(4, X), Cells(9, X))
' Copy over the values from the source to the destination.
DestRange.Value = SourceRange.Value
'Get hourly from each file
For i = 12 To 8762
Workbooks("Summary.xlsm").Worksheets("Sheet1").Range(Cells(12, X), Range(Cells(12, X).End(xlDown))) = _
Application.WorksheetFunction.Index(WorkBk.Worksheets(2).Range("B3:B8762"), Application.Match(Workbooks("Summary.xlsm").Worksheets("Sheet1").Range(Cells(i, X)), WorkBk.Worksheets(2).Range("A3:A8763")), 0)
Next i
' Increase NColumn so that we know where to copy data next.
X = X + DestRange.Columns.Count
' Close the source workbook without saving changes.
WorkBk.Close savechanges:=False
' Use Dir to get the next file name.
FileName = Dir()
Loop
' Range("C4:C9", Range("C4:C9").End(xlToRight)).Sort key1:=Range("b7"), key2:=Range("b8"), key3:=Range("b9"), _
' order1:=xlAscending, Orientation:=xlLeftToRight
endTime = Now()
totTimeSec = Round(((endTime - startTime) * (24 * CLng(3600))), 1)
MsgBox (totTimeSec & " seconds")
End Sub
我还没有完成所有代码检查问题,但主要问题是:
- 您没有正确限定您的 Range 和 Cells 调用 工作表对象;
- 您不能使用
Range(cells(x, y))
除非Cells(x, y)
处单元格的值是一个范围的地址。 - 您在索引/匹配部分中的括号不正确。
试试这个:
Sub MergeAllWorkbooks2()
Dim FolderPath As String
Dim X As Long
Dim i As Long
Dim FileName As String
Dim WorkBk As Workbook
Dim SourceRange As Range
Dim DestRange As Range
Dim wsDest As Worksheet
'path of directory
FolderPath = "C:\Users\XXXX\Desktop\New folder\XXXXX\"
' Setting starting points
X = 3
' Call Dir the first time, pointing it to all Excel files in the folder path.
FileName = Dir(FolderPath & "*.xl*")
' Loop until Dir returns an empty string.
Do Until FileName = ""
' Open a workbook in the folder
Set WorkBk = Workbooks.Open(FolderPath & FileName)
'Set the source range
Set SourceRange = WorkBk.Worksheets(1).Range("C2:C7")
' Set the destination range
Set wsDest = Workbooks("Summary.xlsm").Worksheets("Sheet1")
Set DestRange = wsDest.Range(wsDest.Cells(4, X), wsDest.Cells(9, X))
' Copy over the values from the source to the destination.
DestRange.Value = SourceRange.Value
'Get hourly from each file
For i = 12 To 8762
wsDest.Range(wsDest.Cells(12, X), wsDest.Cells(12, X).End(xlDown)) = _
Application.WorksheetFunction.Index(WorkBk.Worksheets(2).Range("B3:B8762"), Application.Match(wsDest.Cells(i, X), WorkBk.Worksheets(2).Range("A3:A8763"), 0), 1)
Next i
' Increase NColumn so that we know where to copy data next.
X = X + DestRange.Columns.Count
' Close the source workbook without saving changes.
WorkBk.Close savechanges:=False
' Use Dir to get the next file name.
FileName = Dir()
Loop
' Range("C4:C9", Range("C4:C9").End(xlToRight)).Sort key1:=Range("b7"), key2:=Range("b8"), key3:=Range("b9"), _
' order1:=xlAscending, Orientation:=xlLeftToRight
endTime = Now()
totTimeSec = Round(((endTime - startTime) * (24 * CLng(3600))), 1)
MsgBox (totTimeSec & " seconds")
End Sub