2014-06-26 92 views
1

我想在循环中选择两个不同的范围(即第一次迭代选择一个范围,第二次迭代选择另一个范围)。这是我尝试在刚刚看到,如果我可以做一个简单的任务,如选择两个范围此起彼伏:Excel VBA:在循环中选择不同的范围

Sub SelectingTwoRanges() 
Dim i As Integer 
Dim m As Integer 
Dim n As Integer 
For i = 1 To 2 
    m = i * 50 - 48 
    n = i * 50 + 1 
    Range(Cells(m, 1), Cells(n, 2)).Select 
Next i 

End Sub 

这给出了错误:“对象的方法'细胞‘_Global’失败”

我如之前已经试过它:

Sub SelectingTwoRanges() 
Dim i As Integer 
Dim m As Integer 
Dim n As Integer 
For i = 1 To 2 
    m = i * 50 - 48 
    n = i * 50 + 1 
    Range("Am:Bn").Select 
Next i 

End Sub 

或者:

Sub SelectingTwoRanges() 
Dim i As Integer 
Dim m As Integer 
Dim n As Integer 
For i = 1 To 2 
    m = i * 50 - 48 
    n = i * 50 + 1 
    Range("A$n:B:m").Select 
Next i 

End Sub 

并没有上述工作。我认为我的问题是在字符串内使用循环依赖变量(我试图通过在“Range()”内使用“Cells(#,#)...”形成来避免这种情况。但现在我只是被卡住了。

这可能

+0

提供的示例工作正常,有没有其他可能会干扰它的代码?对于第二个例子,代码应该看起来像'Range(“A”&m&“:B”&n).Select',这应该也可以。 –

+0

您的第一个样品适合我。 – tbur

+0

尝试用表单名称和/或图纸号完全限定您的范围参考。 – sous2817

回答

2

很可能你得到的“Object'_Global'Failed”错误的方法'Cells',因为您的Cells()方法未附加到对象。根据这篇文章(Method 'Range' of object '_Global' failed. error),你可以通过使用“activeSheet”来避免这种情况。

Sub SelectingTwoRanges2() 
    Dim i As Integer 
    Dim m As Integer 
    Dim n As Integer 
    For i = 1 To 2 
     m = i * 50 - 48 
     n = i * 50 + 1 
     With ActiveSheet 
      .Range(.Cells(m, 1), .Cells(n, 2)).Select 
     End With 
    Next i 
End Sub 

至于你的其他例子;你完全正确。在字符串中包含变量名称根本不引用该变量。您可以使用以下格式连接字符串(VBA将自动尝试变量值转换为串联字符串)

Range("A" & m & ":B" & n).Select 

个人而言,我喜欢使用CStr的(),以确保VBA的值转换为字符串

Range("A" & CStr(m) & ":B" & CStr(n)).Select 
1

第一个例子为我工作,但尝试:?

activesheet.Range(activesheet.Cells(m, 1), activesheet.Cells(n, 2)).Select 

这将完全限定细胞()范围参考