在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