尝试将变量Dim'd设置为Range以列出一列中的278个条目

时间:2015-03-01 21:43:04

标签: excel-vba vba excel

这是我的代码:

Dim rngNames As Range
--- other code
Sheets("MDs Scorecard").Select
Range("E8").Select
**Set rngNames = Range(Selection, Selection.End(xlToRight)).Select  <<--**
Selection.Copy
--- other code

**行导致运行时错误&#39;&#39;&#39;:需要对象。

如何将变量Dim&#d; d作为范围设置为从定义的单元格开始到最后一个包含值的单元格的范围?

2 个答案:

答案 0 :(得分:0)

关闭,只需从该行中删除.select即可。要将其设置为对象,您不想选择它。

你也可以通过组合成这样的组来摆脱E8上的选择:

Sub testRng()
Dim rngNames As Range
Set rngNames = Range(Range("E8"), Range("E8").End(xlToRight))
rngNames.Select
End Sub

所以你的会是这样的:

Dim rngNames As Range
--- other code
Sheets("MDs Scorecard").Select
Set rngNames = Range(Range("E8"), Range("E8").End(xlToRight))
Selection.Copy
--- other code

注意,您也可以删除工作表选择,但这取决于您在复制后所做的工作,您可以像这样对其进行限定:

Set rngNames = Sheets("MDs Scorecard").Range(Sheets("MDs Scorecard").Range("E8"), Sheets("MDs Scorecard").Range("E8").End(xlToRight))

答案 1 :(得分:0)

在写一个正确的答案时,丹比我快。但是,我认为还有一些值得制作的额外点,所以我发布了答案。

您的标题显示您要选择一列但您正在尝试选择一行。您的意思是使用xlDown而不是xlToRight

您说您希望选择以包含值的最后一个单元格结束。 <{1}}和xlDown都不能保证这样做。

xlToRightEnd(xlDown)End(xlUp) End(xlToRight) Ctrl + 箭头的VBA等价物。我建议你把光标放在E8上,然后尝试 Ctrl + 右箭头

  • E8或行的其余部分没有值。
  • E8中的值,但不包含在行的其余部分中。
  • E8和E9中的值。行的其余部分的状态并不重要。
  • E8和E10中的值。行的其余部分的状态并不重要。

我怀疑你会在所有情况下得到你期望的效果。

从底行或最右边的列开始向E8移动更有可能为您提供所需的效果。

选择1

End(xlToLeft)扩展选择并选择扩展范围

Range(Selection, Selection.End(xlToRight)).Select

选择2

此代码设置rngName,然后将其内容粘贴到以H10开头的范围。

Sheets("MDs Scorecard").Select
Range("E8").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy

选择3

此代码更有可能为您提供所寻求的效果并避免使用Dim rngNames As Range Sheets("MDs Scorecard").Select Range("E8").Select Set rngNames = Range(Selection, Selection.End(xlToRight)) rngNames.Copy Range("H10").Select ' Example paste of selected range ActiveSheet.Paste 。避免Select是一种很好的做法,因为它是一个缓慢的命令,如果你在工作表之间切换它可能会变得非常混乱。我显示设置Select到行和列,因为我不清楚你想要什么。我使用Debug.Print来显示语句的效果。

rngNames