Excel VBA:在循环中选择不同的范围

时间:2014-06-26 16:10:53

标签: excel vba 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

这给出了错误:" Method' Cells'对象' _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

以上都没有奏效。我认为我的问题是在字符串中使用循环相关变量(我试图通过使用"单元格(#,#)..."在"范围()&#内形成34;但现在我被卡住了。

这可能吗?

2 个答案:

答案 0 :(得分:2)

您可能正在获得"方法'细胞'对象' _Global'失败"错误,因为您的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 :(得分:1)

第一个例子适用于我,但请尝试:

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

这将完全限定Cells()范围参考。