我试图在循环中选择两个不同的范围(即第一次迭代选择一个范围,第二次迭代选择另一个范围)。我试着看看能不能一个接一个地选择两个范围这样的简单任务:
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;但现在我被卡住了。
这可能吗?
答案 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()范围参考。