Устаревшая функция vba, которая возвращает количество строк, вместо этого возвращает 1

Я работаю с унаследованным кодом, на котором я хотел бы построить, и я не могу понять следующее: Почему функция AantalZichtbareRows вернуть 1? Где это говорит For Each row In rng.Rows количество строк составляет 1500 с чем-то (и фактическое превосходство, с которым я работаю).

Я специально озадачен n = r.Areas.Count, Это где 1 происходит.

Sub motivatieFormOpmaken()

Public iLaatsteKolom As Integer
Public iLaatsteRij As Integer
Public iKolomnrCorpID As Integer
Public iKolomnrNaam As Integer
Public iKolomnrHuidigeFunctie As Integer

Const StBestand = "Stambestand.xlsm"
Const motivatie = "Template motivatieformulier opstapregeling.xlsx"

    Dim wbMotivTemp As Workbook
    Dim wsMotiv As Worksheet
    Dim PathOnly, mot, FileOnly As String
    Dim StrPadSourcenaam As String

    Set wbMotivTemp = ThisWorkbook
    Set wsMotiv = ActiveSheet

    StrHoofdDocument = ActiveWorkbook.Name
    StrPadHoofdDocument = ActiveWorkbook.Path
    StrPadSourcenaam = StrPadHoofdDocument & "\" & c_SourceDump

    If Not FileThere(StrPadSourcenaam) Then
       MsgBox "Document " & StrPadSourcenaam & " is niet gevonden."
    Exit Sub
    End If

    Application.ScreenUpdating = False

    Workbooks.Open FileName:=StrPadSourcenaam
    Application.Run "Stambestand.xlsm!unhiderowsandcolumns"
    Worksheets("stambestand").Activate

    iLaatsteKolom = Worksheets("stambestand").Cells.SpecialCells(xlLastCell).Column
    iLaatsteRij = Worksheets("stambestand").Cells.SpecialCells(xlLastCell).row

    VulKolomNr
    If KolomControle = False Then Exit Sub

    Aantalregels = AantalZichtbareRows
        Dim rng As Range
        Dim row As Range
        Dim StrFileName As String
        'If Aantalregels > 1 Then
         Set rng = Selection.SpecialCells(xlCellTypeVisible)
         For Each row In rng.Rows
              iRijnummer = row.row
              If iRijnummer > 1 Then
                 wsMotiv.Range("motiv_cid") = Cells(iRijnummer, iKolomnrCorpID).Text
                 wsMotiv.Range("motiv_naam") = Cells(iRijnummer, iKolomnrNaam).Text
                 wsMotiv.Range("motiv_ldg") = Cells(iRijnummer, iKolomnrHuidigeLeidingGevende).Text

                 n = naamOpmaken
                 wbMotivTemp.Activate
                 ActiveWorkbook.SaveAs FileName:=StrPadHoofdDocument & "\Docs\" & n & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
              End If
         Next row

End Sub

Function naamOpmaken() As String
    Dim rng As Range
    Dim row As Range
    Set rng = Selection.SpecialCells(xlCellTypeVisible)

    iRijnummer = rng.row
        If iRijnummer > 1 Then
            naam = Cells(iRijnummer, iKolomnrNaam).Text
            ldg = Cells(iRijnummer, iKolomnrHuidigeLeidingGevende).Text
            cid = Cells(iRijnummer, iKolomnrCorpID).Text

            Dim Position As Long, Length As Long
            Dim n As String
            Position = InStrRev(naam, " ")
            Length = Len(naam)
            n = Right(naam, Length - Position)
        End If
    naamOpmaken = n + "-" + ldg + "-" + cid
End Function

Public Function AantalZichtbareRows() As Integer
    Dim rwCt As Long
    Dim r As Range
    Dim n As Long
    Dim I As Long
        Set r = Selection.SpecialCells(xlCellTypeVisible)
        n = r.Areas.Count
            For I = 1 To n
              rwCt = rwCt + r.Areas(I).Rows.Count
            Next I
        AantalZichtbareRows = rwCt
End Function

1 ответ

Решение

Range.areas указывает количество областей выбора. Range.Areas

Я проверил ваш код, и он работает, как ожидалось. Вы можете иметь одну область выбора, содержащую 1500 строк. Пример: "A1:A1500". Или у вас может быть выделение, содержащее 2 области по три строки в каждой, всего 6 строк. Пример: "A1:A3" и "C4:C6".

Этот код может помочь вам понять, как метод возвращает информацию о выбранных ячейках.

Public Function AantalZichtbareRows() As Integer
    Dim rwCt As Long
    Dim rwCt2 As Long
    Dim r As Range
    Dim n As Long
    Dim I As Long

    Set r = Selection.SpecialCells(xlCellTypeVisible)
    n = r.Areas.Count
    For I = 1 To n
      rwCt = rwCt + r.Areas(I).Rows.Count
    Next I

    Set r = Selection
    n = r.Areas.Count
    For I = 1 To n
      rwCt2 = rwCt2 + r.Areas(I).Rows.Count
    Next I

    Debug.Print n & " areas selected."
    Debug.Print rwCt2 & " rows selected."
    Debug.Print rwCt & " visible rows selected."
    Debug.Print (rwCt2 - rwCt) & " hidden rows selected."

    AantalZichtbareRows = rwCt
End Function
Другие вопросы по тегам