Excel VBA使用.Cells定义.Range

我遇到了一个问题,试图select/复制我的工作表中的某些范围。 我已尽可能缩小范围。

这工作正常:

dataSheet.Cells(dRow, dataSheet.Range("IO_MODULES").Column).Select 

这不:

 dataSheet.Range(Cells(dRow, dataSheet.Range("IO_MODULES").Column), Cells(dRow, dataSheet.Range("IO_MODULES").Column)).Select 

这就是我想要做的:

 dataSheet.Range(Cells(dRow, dataSheet.Range("IO_MODULES").Column), Cells(dRow, dataSheet.Range("MODULE_END").Column)).Copy Destination:= _ dataSheet.Range(Cells(dataSheet.Range("MODULE_1").Row + i - 1, dataSheet.Range("D_COUNT").Column + 1), Cells(dataSheet.Range("MODULE_1").Row + i - 1, dataSheet.Range("DATA_COL_END").Column)) 

我似乎误解了Worksheet.Cells和Worksheet.Range之间的关系。 我需要做的是能够根据我命名的单元格的行号和列号来select一系列单元格。

UNTESTED尝试从一个Range复制到另一个Range

 '... Dim Source As Range, Dest As Range With dataSheet Set Source = .Range(.Cells(dRow, .Range("IO_MODULES").Column), _ .Cells(dRow, .Range("MODULE_END").Column)) Set Dest = .Range(.Cells(.Range("MODULE_1").Row + i - 1, .Range("D_COUNT").Column + 1), _ .Cells(.Range("MODULE_1").Row + i - 1, .Range("DATA_COL_END").Column)) Source.Copy Dest End With 
  1. With...End With可以让你在单个对象(在本例中是dataSheet )上多次操作,而不必每次都明确地调用它。 你写的每一行代码都是必须维护和debugging的行 ,所以当你可以更简洁而又不失可读性时,你应该这样做。 (关于With...End With更多信息With...End With语句: http : //msdn.microsoft.com/en-us/library/office/gg264723(v=office.15 ) .aspx )
  2. 通过命名Ranges您可以使用超级友好的Range.Copy方法,这里概述: http : //msdn.microsoft.com/en-us/library/office/ff837760( Range.Copy .aspx 。 这使您可以绕过.Select.Activate ,这在我的经验中是运行时错误的主要来源。