我正在尝试将数据从一个大的excel文件复制到另一个(6K +行)。 目标是在检查是否已经存在一列数据之后,将3个单独的列彼此相邻地复制。我想制作一个宏,每天复制数据并将其放置在较旧的数据列旁边(中间有2列)。复制数据部分工作正常,但我无法弄清楚如何制作,因此复制数据之间存在空间。
即时消息错误是'范围'对象'_worksheet'的方法失败。
我的代码是:
Function Inc(ByRef i As Integer)
i = i + 1
End Function
Sub grabData()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim ws1 As Worksheet
'## Open both workbooks:
Set wb1 = Workbooks("clipDataBaan.xlsm")
Set wb2 = Workbooks.Open("H:\Data\Documents\dataOpenOrders.xlsm")
Set ws1 = wb1.Worksheets("Data")
'this next piece of code is to determine the last column and add 2 empty spaces in between the next block of columns
Dim lclm As Integer
lclm = Cells(2, Columns.Count).End(xlToLeft).Column
Inc lclm
Inc lclm
'copy the first column:
wb2.Sheets("19-9-2018").Range("A2", wb2.Sheets("19-9-2018").Range("A65536").End(xlUp)).Copy
'Now, paste to worksheet:
ws1.Range(ws1.Cells(2, lclm)).PasteSpecial -this is where i get the error
Inc lclm 'step to the next column so data isnt pasted on top of eachother
'repeat for 2 other columns
wb2.Sheets("19-9-2018").Range("N2", wb2.Sheets("19-9-2018").Range("N65536").End(xlUp)).Copy
ws1.Range(ws1.Cells(2, lclm)).PasteSpecial
Inc lclm
wb2.Sheets("19-9-2018").Range("O2", wb2.Sheets("19-9-2018").Range("O65536").End(xlUp)).Copy
ws1.Range(ws1.Cells(2, lclm)).PasteSpecial
wb2.Close
End Sub
我知道我在选择正确的工作簿时做错了事,但是我无法终生弄清楚是什么。
如果我将粘贴命令更改为静态值,则其工作方式如下:
ws1.Range("A2").PasteSpecial
我尝试使用范围变量并在该变量中设置范围,然后在粘贴命令中使用该变量,如下所示:
ws1.Range("RangeVar").PasteSpecial
但是我仍然遇到相同的错误1004
预先感谢
答案 0 :(得分:0)
您的问题不是“选择正确的工作簿” ,而是正确地引用了单元格。
如果要按行和列编号引用单元格,只需使用Cells
并完全避免使用Range
。
将ws1.Range(ws1.Cells(2, lclm)
更改为ws1.Cells(2, lclm)
。
答案 1 :(得分:0)
如果您使用的是范围变量(Dim RangeVar as Range
),则可以在不带Range()
的情况下调用它:
Dim RangeVar as Range
Set RangeVar = ws1.Range("A2")
RangeVar.PasteSpecial
确保 确定 ,在您引用Range
的任何地方,都应包含您希望使用的工作表。否则,它将引用任何ActiveSheet
。