范围并集在VBA函数中不起作用

范围并集在VBA函数中不起作用,vba,excel,range,union,Vba,Excel,Range,Union,我尝试了被接受的答案,但有一点变化,但我的范围Arr从未追加 当我试图调试它时,它只是第一个范围。接头从未工作过。为什么会这样 源代码: Public Function VisibleRows(InRange As Range) As Range Dim R As Range Dim Arr As Range Dim RNdx As Integer Dim Count As Integer For RNdx = 1 To InRange.Rows.Cou

我尝试了被接受的答案,但有一点变化,但我的范围
Arr
从未追加

当我试图调试它时,它只是第一个范围。
接头
从未工作过。为什么会这样

源代码:

Public Function VisibleRows(InRange As Range) As Range
    Dim R As Range
    Dim Arr As Range
    Dim RNdx As Integer
    Dim Count As Integer

    For RNdx = 1 To InRange.Rows.Count
        Set R = InRange(RNdx)
        If R.EntireRow.Hidden = False And R.Value2 <> "" Then
            If Arr Is Nothing Then
                Set Arr = R
            Else
                Set Arr = Union(Arr, R)
            End If
        End If
    Next RNdx
    VisibleRows = Arr
End Function
Public Function VisibleRows(范围为范围内)范围为范围
调光范围
弱Arr As范围
作为整数的Dim RNdx
将计数设置为整数
对于RNdx=1到InRange.Rows.Count
设置R=InRange(RNdx)
如果R.EntireRow.Hidden=False且R.Value2为“”,则
如果Arr不算什么,那么
设置Arr=R
其他的
设置Arr=接头(Arr,R)
如果结束
如果结束
下一个RNdx
VisibleRows=Arr
端函数

我发现代码中有几个问题:

  • 您正在逐行循环,但是表达式
    InRange(RNdx)
    将RNdx的第四个单元格置于范围内-它先水平移动,然后垂直移动。您可能需要
    InRange.Cells(RNDx,1)

  • Set VisibleRows=Arr


  • 函数正在返回一个范围对象。范围对象被指定给带有单词
    Set
    的变量。你没有用这个词。试试这个,运行
    TestMe()

    选项显式
    公共子TestMe()
    可见行(范围(“A1:A10”))。选择
    端接头
    公共函数VisibleRows(在范围内为范围)为范围
    调光范围
    弱Arr As范围
    作为整数的Dim RNdx
    将计数设置为整数
    对于RNdx=1到InRange.Rows.Count
    设置R=InRange(RNdx)
    如果R.EntireRow.Hidden=False且R.Value2为“”,则
    如果Arr不算什么,那么
    设置Arr=R
    其他的
    设置Arr=接头(Arr,R)
    如果结束
    如果结束
    下一个RNdx
    设置VisibleRows=Arr
    端函数
    
    这是它的样本结果:


    没必要大喊大叫。我能理解你的沮丧,但使用粗体大写字母在收到回复时不会有什么不同。好的。。。我的道歉!我会去编辑它!!!如果将
    Debug.Print R.Address
    放在紧靠行的前面
    如果Arr不存在,则
    ,您将能够看到If语句捕获的单元格。更改
    设置R=InRange(RNdx)
    设置R=InRange.cells(RNdx)
    ,将RNdx=1的
    更改为InRange.Rows.Count
    更改为
    将RNdx=1的
    更改为InRange.Cells.Count
    并将
    VisibleRows=Arr
    更改为
    设置VisibleRows=Arr
    ,这将适用于单个列,但如果范围为
    A1:B10
    则只有在没有隐藏行且所有行都包含值的情况下才会高亮显示前五行。由于@igorsp7在量程(RNdx,1)中有-
    将检查量程的第一列。
    Option Explicit
    
    Public Sub TestMe()
    
        VisibleRows(Range("A1:A10")).Select
    
    End Sub
    
    Public Function VisibleRows(InRange As Range) As Range
    
        Dim R As Range
        Dim Arr As Range
        Dim RNdx As Integer
        Dim Count As Integer
    
        For RNdx = 1 To InRange.Rows.Count
            Set R = InRange(RNdx)
            If R.EntireRow.Hidden = False And R.Value2 <> "" Then
                If Arr Is Nothing Then
                    Set Arr = R
                Else
                    Set Arr = Union(Arr, R)
                End If
            End If
        Next RNdx
        Set VisibleRows = Arr
    
    End Function