Vba 使用intersect(replace(join())子对象时出现问题
我对以下代码有一些问题Vba 使用intersect(replace(join())子对象时出现问题,vba,Vba,我对以下代码有一些问题 rng是一个表示相当大的表的范围。例如A1:G600重构是行号列表。我需要以下代码传回一个范围,以便仅从rng中选择refArr中的行 但是,当我的refArr太长时(即当它有超过54个项目时),它会给我一个错误。。。。你知道为什么会这样吗 Function RangeSelector(rng As Range, refArr As Variant) As Range Set RangeSelector = Intersect(rng, rng.Range("A"
rng
是一个表示相当大的表的范围。例如A1:G600
<代码>重构是行号列表。我需要以下代码传回一个范围,以便仅从rng
中选择refArr
中的行
但是,当我的refArr
太长时(即当它有超过54个项目时),它会给我一个错误。。。。你知道为什么会这样吗
Function RangeSelector(rng As Range, refArr As Variant) As Range
Set RangeSelector = Intersect(rng, rng.Range("A" & Replace(Join(refArr, ","), ",", ",A")).EntireRow.Offset(1))
End Function
问题是
范围
的最大字符串长度为255。我们可以通过使用Union
来解决这个问题
请注意,Range.address
将仅返回255个字符,即使实际地址更长
在测试中,我使用范围选择器
从1到600每隔一行进行选择
试验
范围选择器
伟大的其中一个领域的实验学习方法落后于学习方法!我永远不会发现。。。。感谢you@user34657795个月前我也不知道,700个答案…哈哈。谢谢你接受我的回答。
Sub TestRangeSelector()
Const MAXROWS As Long = 300
Dim refArr(1 To MAXROWS), x As Long
Dim Target As Range
For x = 1 To MAXROWS
refArr(x) = x * 2
Next
Set Target = RangeSelector(Range("A1:G600"), refArr)
Target.Select
Debug.Print "Absolute Address: "; Len(Target.Address), Target.Address
Debug.Print "Relative Address: "; Len(Target.Address(False, False)), Target.Address(False, False)
End Sub
Function RangeSelector(rng As Range, refArr) As Range
Dim s As String, Target As Range, v As Variant, x As Long
For x = LBound(refArr) To UBound(refArr)
s = s & refArr(x) & ":" & refArr(x) & ","
If x = UBound(refArr) Or Len(s) >= 251 Then
s = Left(s, Len(s) - 1)
If Target Is Nothing Then
Set Target = rng.Range(s)
Else
Set Target = Union(Target, rng.Range(s))
End If
s = ""
End If
Next
Set RangeSelector = Intersect(rng, Target)
End Function