这是我的代码:
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作为范围设置为从定义的单元格开始到最后一个包含值的单元格的范围?
答案 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
都不能保证这样做。
xlToRight
,End(xlDown)
,End(xlUp)
End(xlToRight)
是 Ctrl + 箭头的VBA等价物。我建议你把光标放在E8上,然后尝试 Ctrl + 右箭头:
我怀疑你会在所有情况下得到你期望的效果。
从底行或最右边的列开始向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