Excel VBA使用.Cells定义.Range

时间:2014-05-27 15:14:10

标签: excel vba range cells

我在尝试选择/复制工作表中的某些范围时遇到了问题。我尽可能地缩小了范围。

这很好用:

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之间的关系。我需要做的是能够根据我所命名的单元格的行数和列数选择一系列单元格。

1 个答案:

答案 0 :(得分:4)

UNTESTED 尝试将其从Range复制到另一个{/ p>:

'...
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),而不是每次都明确调用它。 您编写的每一行代码都必须维护并可能进行调试,因此,如果您可以更简洁而不失去可读性,则应该这样做。 (有关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(v=office.15).aspx。这使您可以绕过.Select.Activate,根据我的经验,这是运行时错误的主要来源。