问题是Cells
是不合格的,这意味着这些单元格引用的工作表根据代码所在的位置而不同。任何时候你打电话Range
or Cells
or Rows
or UsedRange
或返回 Range 对象的任何内容,并且您不指定它位于哪个工作表上,工作表将根据以下方式分配:
- 在工作表的类模块中:该工作表无论处于活动状态如何
- 在任何其他模块中:ActiveSheet
您有资格Range
参考,但是Cells
引用不合格,很可能指向 Activesheet。就像写作一样
ThisWorkbook.Worksheets(1).Range(ActiveSheet.Cells(1, 1), ActiveSheetCells(2, 2)).Value
除非 ThisWorkbook.Worksheets(1) 恰好处于活动状态,否则这当然没有任何意义。我经常喜欢使用 With 块,以便确保一切都完全合格。
With Sheets(1)
.Range(.Cells(1,1), .Cells(2,2)).Value = "something"
End With
但是您引用了两个不同的工作表,因此最好使用短工作表变量,例如:
Dim shSource As Worksheet
Dim shDest As Worksheet
Set shSource = ThisWorkbook.Worksheets(1)
Set shDest = Workbooks("myBook").Worksheets(1)
shDest.Range(shDest.Cells(1, 1), shDest.Cells(2, 2)).Value = _
shSource.Range(shSource.Cells(1, 1), shSource.Cells(2, 2)).Value
但实际上,如果你要硬编码Cells
争论,你可以像这样清理它
shDest.Cells(1, 1).Resize(2, 2).Value = shSource.Cells(1, 1).Resize(2, 2).Value