【问题标题】:Excel VBA defining a .Range with .CellsExcel VBA 用 .Cells 定义 .Range
【发布时间】:2014-05-27 15:14:09
【问题描述】:

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

这很好用:

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——这里有一篇很好的文章:stackoverflow.com/questions/10714251/…
  • Cells 是一个不合格的范围对象,所以它总是被隐式定义为ActiveSheet.Cells。因此,dataSheet.Range(Cells(... 会出现错误,除非 dataSheet ActiveSheet
  • 哇,不敢相信我忽略了这一点。不知道我在想什么像我一样使用 Cells。谢谢

标签: excel vba range cells


【解决方案1】:

UNTESTED 尝试将其从一个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)进行多次操作,而无需每次都显式调用它。 您编写的每一行代码都是必须维护和可能调试的行,所以当您可以更简洁而又不失可读性时,您应该这样做。 (更多关于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,根据我的经验,这是运行时错误的主要来源。

【讨论】:

  • 成功了,非常感谢。为什么我们需要范围变量?
  • 丹你的答案当然有效,但如果你能解释为什么它会有效,那将是一个更好的答案......
  • 命名Ranges 将允许您使用Range.Copy,此处概述:msdn.microsoft.com/en-us/library/office/…
  • 然后...包裹。 +1 @DavidZemens 推动解释,而不仅仅是答案
猜你喜欢
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
相关资源
最近更新 更多