在Excel中定义单元格位置variables

我正在寻找一种方法,而不是在我的vba代码中反复input“ActiveCell.OffSet(1,1)”,将其定义为variables“x”,然后使用它。

我必须使用昏暗的命令来做到这一点,但我不知道什么样的数据types。

build议?

当我使用下面的代码testing它时,我得到运行时错误1004。

Private Sub CommandButton1_Click() Dim i As Range Set i = ActiveCell ActiveSheet.Range(ActiveSheet.Range(i), ActiveSheet.Range(i).End(xlUp)).Select End Sub 

回应你的编辑

避免使用。select.Select/Activate并完全限定您的对象。 有趣的阅​​读

你的代码可以写成

 Private Sub CommandButton1_Click() Dim ws As Worksheet Dim rng1 As Range, rng2 As Range '~~> Change as applicable Set ws = ThisWorkbook.Sheets("Sheet1") With ws Set rng1 = ws.Range("A10") Set rng2 = .Range(rng1, rng1.End(xlUp)) With rng2 Debug.Print .Address ' '~~> Do something with the range ' End With End With End Sub 

如果你仍然想知道你的代码有什么问题,那么看看这个。

你已经定义了你的范围。 您不需要再次添加ActiveSheet.Range() 。 你的代码可以写成

 Private Sub CommandButton1_Click() Dim i As Range Set i = ActiveCell ActiveSheet.Range(i, i.End(xlUp)).Select End Sub 

编辑

从评论后续

是ActiveSheet.Range()实际上有问题或只是多余的? – user3033634 14分钟前

这是problematic 。 范围对象的默认属性是.Value

考虑这个例子,它将解释你的代码出了什么问题

 Sub Sample() Dim ws As Worksheet Dim rng As Range Set ws = ThisWorkbook.Sheets("Sheet1") With ws Set rng = .Range("A1") rng.Value = "Blah" MsgBox rng '<~~ This will give you "Blah" MsgBox rng.Value '<~~ This will give you "Blah" MsgBox rng.Address '<~~ This will give you "$A$1" MsgBox ws.Range(rng) '<~~ This will give you an error '~~> Why? Becuase the above is evaluated to 'MsgBox ws.Range("Blah") MsgBox ws.Range(rng.Address) '<~~ This will give you "Blah" End With End Sub 
 Dim x As Range Set x = ActiveCell.OffSet(1,1) 

编辑:在回应你的评论:

 Private Sub CommandButton1_Click() Dim i As Range Set i = ActiveCell ActiveSheet.Range(i, i.End(xlUp)).Select End Sub