.SpecialCells (xlCellTypeVisible) .Rows.Count не возвращает правильное количество видимых строк - PullRequest
0 голосов
/ 16 апреля 2019

Я использую этот код для фильтрации данных, которые мне нужны, чтобы я мог скопировать и вставить в другую книгу.

С фильтром проблем нет, но Count возвращает неверное количество видимых строк.

Count1 = .SpecialCells(xlCellTypeVisible).Rows.Count

Я также пытался Count1 = Rows.SpecialCells(xlCellTypeVisible).Count, но это дает мне ошибку.

Sub ListForeignTrans()
Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim lCopyLastRow As Long
Dim lDestLastRow As Long
Dim Rng As Range
Dim CoName As Range
Dim Count1 As Long


Set wsDest = ThisWorkbook.Worksheets("List Foreign Trans")

Set Rng = wsDest.Range("E2")   'To be use in the directory

Set CoName = wsDest.Range("E1") 'To be use in the directory

'Open workbook
Workbooks.Open Filename:= _
  "\\172.17.10.134\Finance Tower\0042_Witholding Tax\" & CoName & "\" & Rng & "\" & CoName & " Exp GL " & Rng & ".XLSX"

'Filter

With Workbooks(CoName & " Exp GL " & Rng & ".XLSX").Worksheets("Sheet1").Range("A1")
.AutoFilter Field:=19, Criteria1:="<>MYR" _
    , Criteria2:="<>", Operator:=xlAnd
.AutoFilter Field:=20, Criteria1:="<>0.00"
.AutoFilter Field:=2, Criteria1:="<> "
Count1 = .SpecialCells(xlCellTypeVisible).Rows.Count 'Count Row

'If only 1 row close workbook, else proceed to copy from the workbook open by previous step to current workbook.
If Count1 = 1 Then GoTo Line1 Else
  Set wsCopy = Workbooks(CoName & " Exp GL " & Rng & ".XLSX").Worksheets("Sheet1")
  lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "Q").End(xlUp).Offset(1).Row
    wsCopy.Range("B2").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy _
    wsDest.Range("Q" & lDestLastRow)
End With

Line1:
'Close Workbook
Workbooks(CoName & " Exp GL " & Rng & ".XLSX").Close SaveChanges:=False

End Sub

Должно быть 3 ряда.Но результат продолжает давать мне 1 ряд.

1 Ответ

0 голосов
/ 17 апреля 2019

Я нашел решение, согласно которому добавил следующие строки:

Set Rng1 = ActiveSheet.AutoFilter.Range
Count1 = Rng1.Columns(2). _
   SpecialCells(xlCellTypeVisible).Count

Ниже приведен полный код:

Sub ListForeignTrans()
Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim lCopyLastRow As Long
Dim lDestLastRow As Long
Dim Rng As Range
Dim Rng1 As Range
Dim CoName As Range
Dim Count1 As Long


Set wsDest = ThisWorkbook.Worksheets("List Foreign Trans")

Set Rng = wsDest.Range("E2")   'To be use in the directory

Set CoName = wsDest.Range("E1") 'To be use in the directory

' List of Foreign Trans

'Open workbook
Workbooks.Open Filename:= _
"\\172.17.10.134\Finance Tower\0042_Witholding Tax\" & CoName & "\" & Rng & "\" & CoName & " Exp GL " & Rng & ".XLSX"

'Filter

With Workbooks(CoName & " Exp GL " & Rng & ".XLSX").Worksheets("Sheet1").Range("A1")
.AutoFilter Field:=19, Criteria1:="<>MYR" _
    , Criteria2:="<>", Operator:=xlAnd
.AutoFilter Field:=20, Criteria1:="<>0.00"
.AutoFilter Field:=2, Criteria1:="<> "
Set Rng1 = ActiveSheet.AutoFilter.Range
Count1 = Rng1.Columns(2). _
   SpecialCells(xlCellTypeVisible).Count


'If only 1 row close workbook, else proceed to copy from the workbook open by previous step to current workbook.
If Count1 = 1 Then GoTo Line1 Else
  Set wsCopy = Workbooks(CoName & " Exp GL " & Rng & ".XLSX").Worksheets("Sheet1")
  lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "Q").End(xlUp).Offset(1).Row
    wsCopy.Range("B2").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy _
    wsDest.Range("Q" & lDestLastRow)
End With

Line1:
'Close Workbook
Workbooks(CoName & " Exp GL " & Rng & ".XLSX").Close SaveChanges:=False

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...