范围并集在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