Все привет!
Второй день бъюсь над задачей по обработке отфильтрованных строк. Проблема в том что не могу программно сосчитать точное их кол-во. К примеру, когда в таблице задаю фильтр (по 3-м значениям), то Эксель отфильтровывает 14 строк. Далее пытаюсь программно определить сколько же Эксель отфильтровал или хотя бы определить адреса этих строк. В пером случае код такой:
Sub Ìàêðîñ9()
Dim rCopyRange As Range
Set rCopyRange = ActiveSheet.AutoFilter.Range.Offset(1, 0).Resize(ActiveSheet.AutoFilter.Range.Rows.Count - 1, _
ActiveSheet.AutoFilter.Range.Columns.Count).SpecialCells(xlCellTypeVisible)
For iCol = 1 To rCopyRange.Columns.Count
li = 0
le = 0
'lCount = 0
'le = iCol - 1
For Each rCell In rCopyRange.Columns(iCol).Cells
'If ActiveCell.Offset(li, le).EntireColumn.Hidden = False And ActiveCell.Offset(li, le).EntireRow.Hidden = False Then
MsgBox ActiveCell.Offset(li, le).Value
lCount = lCount + 1
'End If
li = li + 1
Next rCell
le = le + 1
Next iCol
End Sub
Задаю в Wathes выражение ActiveSheet.AutoFilter.Range.Rows.SpecialCells(xlCellTypeVisible), которое в свойстве Value2 показывает только 7 строк (по таблице первые семь) отфильтрованных строк. Куда остальные 7 строк девалоь не понятно.
во втором случае пытаюсь определить адреса отфильтрованных строк следующим кодом:
Sub Ìàêðîñ5()
'
' Ìàêðîñ5 Ìàêðîñ
'
Set filter_range = ActiveSheet.AutoFilter.Range.Offset(1, 0).Resize(ActiveSheet.AutoFilter.Range.Rows.Count - 1, _
ActiveSheet.AutoFilter.Range.Columns.Count).SpecialCells(xlCellTypeVisible)
strRange = filter_range.Address
mystr = Replace(strRange, "$", "", 1)
b = Len(mystr)
c1 = 1
i = 0
Do
If InStr(1, mystr, ":") > 0 Then
If InStr(c1, mystr, ",") > 0 Then
c = Left(mystr, InStr(c1, mystr, ",") - 1)
Else
c = mystr
End If
c2 = Val(Replace(c, ":", " ", 1))
v1 = Right(Left(c, InStr(1, c, ":") - 1), Len(Left(c, InStr(1, c, ":") - 1)) - 1)
v2 = Right(Right(c, InStr(1, c, ":") - 1), Len(Right(c, InStr(1, c, ":") - 1)) - 1)
c1 = Len© + 1
cc = Len(mystr) - Len(c1)
d = Left(c, InStr(1, c, ":") - 1)
mystr = Mid(mystr, c1 + 1, Len(mystr))
If mystr = "" Then Exit Do
i = i + 1
MsgBox mystr
bbb = filter_range.Count
Else
Exit Do
End If
Loop Until InStr(1, mystr, ":") = 0
MsgBox CStr(i)
End Sub
Данный код (переменная mystr) позволяет получить диапозон адресов отфильтрованных сток. В нашем случае такой "A11:P11,A13:P13,A15:P16,A18:P18,A24:P25". Если посчитать то опять имеем только 7 строк.
Вообщем, где ошибка? как получить 14 строк?