Daten in nächste leere Zeile einfügen

josef24

Erfahrenes Mitglied
Hallo zusammen. Wie immer suche ich auch diesmal Unterstützung für eine VBA Code wo mir bei der Datenübergabe in nächste leere Zeile befüllt werden soll.

Ich komme da nicht so recht weiter. Vielleicht kann hier im Forum mir da weiter helfen. Mein Versuch ist in Reihe 10 bis 14. Aber das funktioniert so leider nicht.

Gruß Josef

Visual Basic:
Private Sub cmdNew_Click()
    Dim lZeile As Long, I As Long, eintrag As Long, rngRow As Range, Reihe As Long, antwort, indextb, ufelemente
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ufelemente = Array("txtPosNr", "txtnummer", "txtAnrede", "txtNachname", "txtVorname", "txtStrasse", "txtPlz", "txtWohnort", "txtTelefon", _

    indextb = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)
    lZeile = wsat.Cells(Rows.Count, 1).End(xlUp).Row + 1
    
            Do While Not ActiveSheet.Cells(Reihe, 1) = ""
            Reihe = Reihe + 1
            Exit Do
            
            Loop
            
    eintrag = 0
    If seekArb(txtPosNr, rngRow) Then
        Else
            Exit Sub
    End If
 
Hoi Josef, Also du willst die nächste freie Zeile ermitteln und befüllen. Was hat das mit einr Zahlenreihe 10 bis 14 zu tun?
Wo im Code ist diese Reihe 10 bis 14 zu finden?

Dann hast du ein grosses Chaos mit den Worksheets. Mal hast du das Worksheet der Variable wsat, dann ActiveSheet und dann nicht weiter definierte Rows, also auch AktiveSheet.

Du definerst Reihe als Long. Also hat sie zu Beginn mal den Wert 0. Du prüfst dann als erstes ob die Zelle Celld(Reihe, 1) einen bestimmten Wert hat. Aber Reihe ist da 0 und es gibt keine Reihe 0
Dein do while funktioniert auch sonst nicht. Die Reihe wird nur hochgezählt, wenn das Feld leer ist. Und das währe dann der Fall, wenn du bereits auf der leeren Zeile bist
Visual Basic:
    'Definieren woher Rows kommt. In dem Fall von wsat
    lZeile = wsat.Cells(wsat.Rows.Count, 1).End(xlUp).Row + 1
    'Das funktioniert nicht. Lösung siehe weiter unten
    Do While Not wsat.Cells(Reihe, 1) = ""
        Reihe = Reihe + 1
        Exit Do
    Loop

Ich hatte vor Jahren mal eine Funktion geschrieben um die letzte beschriebene Zeile zu finden
[VBA] [Excel] Letzte gefüllte Zeile/Spalte [Yaslaw.Info]
Visual Basic:
'/**
' * ermitteln der letzten gefüllten Zeile eines Worksheets
' * Die Funktion Sheet.Cells.SpecialCells(xlCellTypeLastCell) liefert auch instanzierte Zeilen ohne Inhalt
' * http://wiki.yaslaw.info/wikka/vbaExcelGetLastRowCol
' * @param  Worksheet               Eine Referenz auf das Worksheet
' * @return Long                    Zeilenindex der letzten Zeile mit Inhalt
' */
Public Function xlsGetLastRow(ByRef iSheet As Excel.Worksheet) As Long
    Dim r As Long
 
    xlsGetLastRow = iSheet.Cells.SpecialCells(xlCellTypeLastCell).row
    For r = xlsGetLastRow To 1 Step -1
        If iSheet.Application.WorksheetFunction.CountA(iSheet.rows(r)) = 0 Then
            xlsGetLastRow = r - 1
        Else
            Exit For
        End If
    Next r
End Function
Das kannst du dann so einbauen und damit den Do While ersetzen
Visual Basic:
Reihe = xlsGetLastRow(wsat) + 1
 
Wo im Code ist diese Reihe 10 bis 14 zu finden?
Er meint Zeile 10-14 in seinem Code-Schnipsel oben.

Kondensierte Aussage aus seinem Code: Zeile 10-14 er rennt auf dem aktiven Arbeitsblatt in Spalte A solange nach unten, bis ne leere Zelle kommt.
Wobei sein Code Schmarrn ist.
Er prüft ob die Zelle leer ist, Falls nein zählt die Variable "Reihe" eins nach oben, und springt dann aus der Schleife (Und hier ist der Fehler!)

Hier eine meiner allg. Funktionen die ich immer in jedem Projekt habe:
Visual Basic:
Public Function GetLastRow(ByVal ASheetName As String, Optional ByVal AColumn As String = "A") As Long
    GetLastRow = Worksheets(ASheetName).Cells(Worksheets(ASheetName).Rows.Count, AColumn).End(xlUp).Row
End Function
Public Function GetLastRow2(ByRef ASheet As Worksheet, Optional ByVal AColumn As String = "A") As Long
    GetLastRow = ASheet.Cells(ASheet.Rows.Count, AColumn).End(xlUp).Row
End Function
 
Hallo zusammen. Danke erstmal für euer Interesse. Den Fehler die Yaslaw anzeigt war ein Versuch von mir und den hatte ich da noch nicht auskommentiert, weil er nicht funktionierte. Kann man denn die Publik -funktion mit einer Call .... mit der Speicherfunktion verbinden? Bei Zvoni's Code ist bei mir das gleiche Problem: Kann und wie ist sein Code ggf. einzufügen? Wegen unzureichender Kenntnis würde ich gerne eure Unterstützung nochmals in Anspruch nehmen. Wenn erforderlich, würde ich die Datei mal anfügen. Gruß Josef
 

Neue Beiträge

Zurück