我可以通过先激活工作表来复制单元格。
我是否应该能够在不激活工作表的情况下进行复制?
Sub test()
Dim wbSource, wbTarget As Workbook
Dim wsSource As Worksheet
Set wbSource = ThisWorkbook
Set wsSource = wbSource.Worksheets(1)
Set wbTarget = Workbooks.Add
Set wsTarget = wbTarget.Worksheets(1)
'Doesnt work
wsSource.Range(Cells(1, 1), Cells(2, 2)).Copy
'Works
'wsSource.Activate
'Range(Cells(1, 1), Cells(2, 2)).Copy
wsTarget.Cells(1, 1).PasteSpecial
End Sub
我得到:
“运行时错误'1004':”
“对象‘_Worksheet’的方法‘范围’失败”
换掉不与代码一起工作的部分(已注释掉)会导致:
换出
wsSource.Range(Cells(1, 1), Cells(2, 2)).Copy
与
wsSource.Range("A1:B2").Copy
有效,但我需要动态更改行和列。
我试图不在活动工作簿之间交替,因此我不依赖于当前活动的工作簿/工作表(选定的窗口)。
最终我试图避免;用户在宏运行时单击任何会更改活动工作簿/工作表的内容并打乱顺序。
当通过 Cells 对象定义 Range 时,它们也必须像编辑的代码中那样进行限定
Sub test()
Dim wbSource, wbTarget As Workbook
Dim wsSource As Worksheet
Set wbSource = ThisWorkbook
Set wsSource = wbSource.Worksheets(1)
Set wbTarget = Workbooks.Add
Set wsTarget = wbTarget.Worksheets(1)
'Doesnt work 'edited
wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(2, 2)).Copy
'Works
'wsSource.Activate
'Range(Cells(1, 1), Cells(2, 2)).Copy
wsTarget.Cells(1, 1).PasteSpecial
End Sub