Clever-Excel-Forum

Normale Version: Daten in letzte Zeile einfügen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Community, 

ich habe gerade einen Fehler in meinem Programm entdeckt. Und zwar füge ich über eine Userform Daten in eine Tabelle.
Dabei suche ich die letzte Zeile und füge dann die Daten in die nächste freie Zeile ein. 

Nun zum Problem. Sobald jedoch ein Filter aktiviert ist, welches dann somit die "letzte Zeile" nach oben verschiebt, überschreibt das Programm die darin enthaltenen Daten.

Gibt es eine Möglichkeit die letzte Zeile auch unter Berücksichtigung des Filters zu ermitteln? Hier mein Code:

Code:
Public Function LZ() As Integer
    Dim z As Integer, i As Integer
        With Worksheets("Liste")
        For i = 2 To 8
            z = .Cells(.Rows.Count, i).End(xlUp).Row + 1
            If z > LZ Then LZ = z
        Next i
    End With
End Function


Code:
Private Sub CommandButton1_Click()
ActiveWorkbook.Save
    Dim z As Integer
    Dim ksa As Variant
   
    With Worksheets("Liste")
        z = LZ
        'ksa = WorksheetFunction.Max(Columns(1)) + 1
        ksa = Worksheets("Daten").Range("B2").Value
        .Cells(z, 1) = ksa
        .Cells(z, 2) = TextBox1.Value
        .Cells(z, 3) = TextBox2.Value
        .Cells(z, 4) = TextBox3.Value
        .Cells(z, 5) = ComboBox1.Value
        .Cells(z, 6) = ComboBox2.Value
        .Cells(z, 7) = ComboBox3.Value
        .Cells(z, 8) = Date
        .Cells(z, 9) = TextBox4.Value
        .Cells(z, 10) = "0"
        .Cells(z, 13) = "offen"
            If Strecke.Value = True Then
            .Cells(z, 14) = "x"
            ElseIf Strecke.Value = False Then
            .Cells(z, 14) = ""
            End If
        .Cells(z, 15) = TextBox16.Value
        .Cells(z, 16) = TextBox17.Value
        .Cells(z, 17) = TextBox18.Value
    End With
        TextBox5.Value = ksa
        TextBox6.Value = TextBox2.Value
        TextBox7.Value = TextBox3.Value
       
    ActiveWorkbook.Save


Man könnte natürlich vor der Abfrage alle Filter entfernen, was allerdings etwas doof wäre.
Gibt es eine andere Möglichkeit?`

Im Voraus besten Dank für die Unterstützung.

VG tyr0n
Hi,

Du kannst den Filterbereich auslesen und dann die die direkt darunter liegende Zeile z.B. so ermitteln:

Code:
Sub til()
Dim lngNextRow As Long
With Worksheets("Liste").AutoFilter.Range
    lngNextRow = .Row + .Rows.Count
End With
MsgBox "Nächste Zeile: " & lngNextRow
End Sub
Hallo

Sorry, mir fiel beim Lesen der Antworten etwas auf, und zwar genau hier:   lngNextRow = .Row + .Rows.Count
Müsste es nicht so lauten:     lngNextRow = .Row + 1      Die letzte Zeile kann ja nicht über Rows.Count hinausgehen, oder???

mfg Gast 123
Hallöchen,

jein. Trifft hier so nicht zu.

Gezählt werden hier die Zeilen vom Autoflter.Range (egal, ob die sichtbar sind oder nicht). Betrifft also nicht das ganze Blatt.

Beim ganzen Blatt würde man so vorgehen:
Cells(Rows.Count, 1).End(xlUp).Row + 1
wenn es nach Spalte A geht...
Entschuldigt die späte Rückmeldung. Es hat funktioniert. Besten Dank Boris für die Lösung! :)