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