Laufnummer erzeugen

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Laufnummer erzeugen

    Moin Moin,

    wie so oft meldet sich mal wieder ein Anfänger zu Wort, sorry dafür aber danke für die Hilfe !

    Ich komme bei meinem Porjekt einer Art Datenbank in VB für Excel nicht weiter. Undzwar soll mein Programm Werte aus Textboxen in die Tabelle eintragen in eine dafür vorgesehene Zeile und bei einem neuen Datensatz die nächste freie Zeile ansteuern. Soweit so gut. Mein Problem ist nun Folgendes :
    Ich möchte das ich Automatisch eine "Margen Nummer" erzeuge sobald ein neuer Datensatz erzeugt wird. Das heißt ich will programmieren das er 1 2 3 4 5 6 7 8 9 usw. selbständig in die Passende Zelle Programmiert Also A3 = 1 A4 = 2 A5 = 3 usw. bis nahe zu ins unendliche.
    Bisher läuft dieses nur über einen Counter desen Wert ich in einer Zelle zwischen Speicher und dann immer +1 erweiter. Echt unschön und Fehler anfällig.

    Und wenn ich eh schon hier bin : Gibt es eine Möglichkeit diese werte je nach Zeile bzw. Laufnummer wieder in die UF einzulesen und diese so zu ändern ?
    So das man im Idealfall nichts mehr von Hand ändern oder löschen muss ?

    Ich hoffe ich habe mein Problem genau genug erklärt
    Ansonsten Danke im vorraus !

    Hier der Code :
    Spoiler anzeigen
    Private Sub Save_Click()

    counter = counter + 1
    If UserForm.AnzahlS = "" Or UserForm.AnzahlM = "" Or UserForm.ComboBox1 = "" Or UserForm.l = "" Or UserForm.d = "" Or UserForm.b = "" Or UserForm.sw = "" Or UserForm.GewichtS = "" Or UserForm.GewichtM = "" Or UserForm.TextBox1 = "" Or UserForm.TextBox2 = "" Then
    MSGBOX.Text = "Alle Werte Eingeben !"
    Else:
    Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 1).End(xlUp).Offset(1, 0).Value = counter
    Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 2).End(xlUp).Offset(1, 0).Value = AnzahlS.Value
    Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 3).End(xlUp).Offset(1, 0).Value = AnzahlM.Value
    Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 4).End(xlUp).Offset(1, 0).Value = Now
    Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 5).End(xlUp).Offset(1, 0).Value = ComboBox1.Value
    Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 6).End(xlUp).Offset(1, 0).Value = l.Value
    Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 7).End(xlUp).Offset(1, 0).Value = d.Value
    Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 8).End(xlUp).Offset(1, 0).Value = b.Value
    Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 9).End(xlUp).Offset(1, 0).Value = sw.Value
    Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 11).End(xlUp).Offset(1, 0).Value = TextBox2.Value
    Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 12).End(xlUp).Offset(1, 0).Value = TextBox1.Value
    [p1] = counter
    End If

    End Sub
    1) Ist ein wenig gefährlich, für jede Spalte die letzte Zeile neu zu berechnen.
    Wenn da Zellen leer sind, verrutscht dein Datensatz.
    Besser:

    Visual Basic-Quellcode

    1. Set c = ​Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 1).End(xlUp).Offset(1, 0)
    2. c.Value = counter
    3. c.Offset(0,1).Value = AnzahlS.Value
    4. '...

    Den Counter würde ich dynamisch erzeugen:

    Visual Basic-Quellcode

    1. Set c = Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 1).End(xlUp).Offset(1, 0)
    2. c.FormulaR1C1 = "=ROW(RC)"
    3. c.Offset(0,1).Value = AnzahlS.Value
    4. '...
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    unfaehig schrieb:

    Meine Werte starten aber erst in der 4. Zeile
    Pass einfach die Formel entwprechend an.
    =ROW(RC)-4 oder =ROW(R[-4]C) oder meinetwegen auch =ROW(RC)-ROW(R4C)
    Am elegantesten ist es mit einem NamedRange (namens StartRow) in der Startreihe: =ROW(RC)-ROW(StartRow)+1
    Was immer dir am besten gefällt.

    unfaehig schrieb:

    wieso = AnzahlS
    Keine Ahnung, das habe ich aus deinem Code.
    Ich habe nicht versucht, ihn inhaltlich zu hinterfragen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --