我试图一次选择三列数据(例如A:C,行2174)以复制到主文件中,其中在Excel中进行额外的计算。然后我想转到原始文件中的下三列(例如D:F)并重复该过程。对于该过程的第一部分,我有以下代码:
For i = 1 To 72 Step 3
Workbooks(Filename).Sheets("Sheet1").Range(Cells(1, i), Cells(2174, i + 2)).Select
Selection.Copy
代码在此处停止,错误“下标超出范围”,尽管“单元格”引用了正确的单元格和文件名从前面的代码正确输入(或者当它被更改为直接引用文件名时)。
任何明确的原因都不清楚。
我认为错误是由于使用整个文件目录而不仅仅是名称而发生的,添加Filename
定义已删除“下标超出范围”错误,但我现在有了
在运行时错误'438':对象不支持此属性或方法
"With Workbooks(Filename).Sheet1"
行上
整个代码如下:
Sub TestImport()
Dim i As Integer
'creates file directory in specified cell
DataFile = Application.GetOpenFilename
Application.ScreenUpdating = False
'removes right click options
Cancel = True
'clear past data
Range("B48:D5000").ClearContents
'open data file
Workbooks.OpenText Filename:=DataFile, _
Origin:=437, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False, _
Comma:=True, Space:=True, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Filename = Right(DataFile, 13)
With Workbooks(Filename).Sheet1
For i = 1 To 13 Step 3
.Range(Cells(1, i), Cells(2174, i + 2)).Copy
Windows("Data Processing.xlsm").Activate
Range("B48").Select
Selection.PasteSpecial Paste:=xlPasteAll
Workbooks.Open DataFile
ActiveWorkbook.Close savechanges:=False
'copy key variable from front sheet to Db
Sheets("Front Sheet").Range("F51:Z53").Copy
Sheets("Db_KeyVariable").Range("B10000").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
'copy summary into Db
Sheets("Calculations").Range("AO4:BL15").Copy
Sheets("Db_StrokeData").Range("B10000").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
Next i
End With
End Sub
答案 0 :(得分:0)
您的错误原因是,(Cells(1, i), Cells(2174, i + 2))
未获得Workbooks(Filename).Sheets("Sheet1")
资格。
此外,无需Select
然后使用Selection.Copy
,只需直接复制Range
(所有Select
都是“花费”大量运行 - 时间)。
尝试以下代码:
With Workbooks(Filename).Sheets("Sheet1")
For i = 1 To 72 Step 3
.Range(.Cells(1, i), .Cells(2174, i + 2)).Copy
' rest of your code goes here...
Next i
End With