我是一个新手,不知道为什么我的代码会引发下标超出范围错误。我试图按下原始工作簿上的一个按钮,打开多个数据文件,然后将它们合并合并到一个工作簿中,每个文件保存为一个单独的工作表。然后我想从每个工作表中复制某些范围,并将它们粘贴到原始工作簿上的一个工作表中,在原始工作表上向下移动,并粘贴下一个数据表中的范围(如果这会引起混淆,请原谅)。它会保存合并后的数据工作簿并将其打开,但不会运行For Each循环将数据复制并粘贴到原始工作簿中。相反,它会触发一个下标超出范围的错误,不让我调试找到问题的根源。
这里是我的代码的修改版本(为了客户保密,不能包括原始文件名)。假设“DataFiles”是组合的数据工作簿,“DataProcessing.xlsm”是我粘贴值的工作簿。文件路径最初也是我所有同事访问的共享S:Drive路径。我知道代码非常草率,但它不需要干净,只需要工作lol。
Sub CombineAndCopyData()
' Select and combine data files into single workbook
Dim xFilesToOpen As Variant
Dim I As Integer
Dim xWb As Workbook
Dim xTempWb As Workbook
Application.ScreenUpdating = False
xFilesToOpen = Application.GetOpenFilename("All Files (*.*), *.*", , "Select Files", , True)
If TypeName(xFilesToOpen) = "Boolean" Then
MsgBox "No files were selected", , "Select Files"
End If
I = 1
Set xTempWb = Workbooks.Open(xFilesToOpen(I))
xTempWb.Sheets(1).Copy
Set xWb = Application.ActiveWorkbook
xTempWb.Close False
Do While I < UBound(xFilesToOpen)
I = I + 1
Set xTempWb = Workbooks.Open(xFilesToOpen(I))
xTempWb.Sheets(1).Move , xWb.Sheets(xWb.Sheets.Count)
Loop
' Set up combined results file
TargetFileName = "DataFiles"
TargetFilePath = "C:\Users\CorToTheWin\Documents\Do Not Delete\" + TargetFileName + ".xlsx"
ActiveWorkbook.SaveAs Filename:=TargetFilePath
Workboo ks("DataFiles").Activate
Application.ScreenUpdating = True
' Loop through each sheet and copy to file
Dim ws As Worksheet
' Setting the starting target rows in DataProcessing.xlsm
TargetRow = 5
TargetRowName = 4
For Each ws In Workbooks("DataFiles").Worksheets
' Selection 1
ws.Range("B16").Copy
TargetCellName = "A" & TargetRowName
Windows("DataProcessing.xlsm").Activate
Range(TargetCellName).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Selection 2
ws.Range("C17:C26").Copy
TargetCell = "B" & TargetRow
Windows("DataProcessing.xlsm").Activate
Range(TargetCell).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Selection 3
ws.Range("E17:E26").Copy
TargetCell = "C" & TargetRow
Windows("DataProcessing.xlsm").Activate
Range(TargetCell).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Selection 4
ws.Range("D17:D26").Copy
TargetCell = "D" & TargetRow
Windows("DataProcessing.xlsm").Activate
Range(TargetCell).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Move the target rows down a few rows
TargetRow = TargetRow + 12
TargetRowName = TargetRowName + 12
TargetRowSTD = TargetRowSTD + 12
Next ws
Workbooks(TargetFileName).Close SaveChanges:=False
End Sub
字符串
如果需要的话,我可以澄清,但是这已经困扰了我和我的同事一个星期了,我已经没有办法了。谢谢!
我尝试改变激活数据工作簿的方法,尝试不同的循环代码块,并尝试将数据工作簿保存到本地文件,所有这些都导致了相同的下标错误。
1条答案
按热度按时间yzckvree1#
通过定义对工作簿的引用来避免使用
ActiveWorkbook
。字符串