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

我试图在循环中select两个不同的范围(即第一次迭代select一个范围,第二次迭代select另一个范围)。 这里是我的尝试,看看我是否可以做一个简单的任务,如一个接一个地select两个范围:

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 

而以上都没有工作。 我认为我的问题是在string内使用循环依赖variables(我试图通过在“Range()”中使用“Cells(#,#)…”)来避免。

这可能吗?

这很可能是因为你的Cells()方法没有附加到一个对象上,所以你得到了Object'_Global'Failed“错误的”Method“单元格。 根据这篇文章( 对象'_Global'失败。错误的方法'范围' ),你可以避免使用“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 

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

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

我个人喜欢使用CStr()来确保VBA将值转换为string

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

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

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

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