2013-11-27 70 views
1

我正在寻找一种方法,而不是在我的vba代码中反复输入“ActiveCell.OffSet(1,1)”,将其定义为变量“x”并使用而不是在Excel中定义单元格位置变量

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

对此提出建议?

当我测试它使用下面的代码,我得到运行时错误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 
+0

发表您的编辑,我做了一些改变,我的答案。您可能需要刷新页面才能看到它。 –

回答

0
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 
+0

范围有意义,我更新了我的问题,以便您可以看到我正在尝试使用它的上下文。我的目标是选择活动单元格上方的连续范围。有什么想法吗? – user3033634

3

在回答您的编辑

避免使用.Select/Activate并完全限定您的对象。 INTERESTING READ

您的代码可以写成

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。 Range对象的默认属性是.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 
+0

是ActiveSheet.Range()实际上有问题或只是多余? – user3033634

+0

'有问题的:) :) –

+1

让我解释一下。一个范围的默认属性是'.Value',所以当你说'ActiveSheet.Range(i)'时,它意味着'ActiveSheet.Range(VALUE OF I)'而不是'ActiveSheet.Range(我的地址)' –

相关问题