Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fortlaufende Numerierung VBA

Fortlaufende Numerierung VBA
08.03.2023 21:57:59
Dieter
Hallo liebe Excel-Gemeinde,
ich habe wieder eine Frage:
ich habe mir eine Lagerverwaltungstabelle gemacht.
Wenn ein Artikel verkauft wird, übertrage ich den Artikel mithilfe Userform von Tabellenblatt "Lagerbestand" zu Tabellenblatt "Buchung".
Mein Problem ist: die Buchungsnummer/Rechnungsnummer ist mit =WENN(M13="";"";N12+1) realisiert und wenn ein Artikel gelöscht wird, dann stimmt die Nummer nicht mehr.
Wie kann ich mein Code so anpassen, dass beim Buchen die Buchungsnummer/Rechnungsnummer eingetragen wird und beim Löschen des Artikels die Nummern nicht verrutschen?
Kann mir bitte jemand helfen?
Die Tabelle füge ich bei. Vielen Dank
Dieter
https://www.herber.de/bbs/user/158187.xlsm

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fortlaufende Numerierung VBA
08.03.2023 22:24:56
Yal
Hallo Dieter,
warum sollte eine Buchung gelöscht werden? Es liegt eigentlich in der buchhalterische Natur von solche Einträge, dass diese nie geändert werden dürfen.
Du musst abfangen, wenn eine neue Zeile in der Tabelle eingeführt wird und einen neuen Zahl als Max von Spalte "BuchungsNr" + 1
Um Abzufangen, dass eine neue Zeile hinzugefügt wurde, musst Du die Anzahl von Zeilen zählen, wenn auf das Blatt Buchung gewechselt wird, und bei Änderung einer Zelle prüfen, ob diese Zahl sich erhöht hat.
Dim ListAnzahlZeile As Long
Private Sub Worksheet_Activate()
    ListAnzahlZeile = Me.ListObjects(1).ListRows.Count
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim AlteAnzahl As Long
    AlteAnzahl = ListAnzahlZeile
    ListAnzahlZeile = .ListRows.Count
    With Me.ListObjects(1)
        If .ListRows.Count > AlteAnzahl Then  'es wurde eine neue Zeile eingefügt
            .ListRows(ListAnzahlZeile).Range(ListColumns("Buchungs- Nr").Index) = Application.Max(ListColumns("Buchungs- Nr").DataBodyRange) + 1
        End If
    End With
End Sub
VG
Yal
Anzeige
Nun ja, doch ein bisschen zu schnell
08.03.2023 22:41:03
Yal
... und ein bisschen zu ungetestet.
Diese Variante hat wesentlich weniger Fehler.
Dim ListAnzahlZeile As Long
Private Sub Worksheet_Activate()
    ListAnzahlZeile = Me.ListObjects(1).ListRows.Count
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim AlteAnzahl As Long
    AlteAnzahl = ListAnzahlZeile
    Application.EnableEvents = False
    With Me.ListObjects(1)
        ListAnzahlZeile = .ListRows.Count
        If .ListRows.Count > AlteAnzahl Then  'es wurde eine neue Zeile eingefügt
            .ListRows(ListAnzahlZeile).Range(.ListColumns("Buchungs- Nr").Index) = ListMax(.Name, "Buchungs- Nr") + 1
        End If
    End With
    Application.EnableEvents = True
End Sub
Private Function ListMax(LOName As String, Spalte As String)
Dim L As ListRow
    With Me.ListObjects(LOName)
        For Each L In .ListRows
            If L.Range(.ListColumns(Spalte).Index) > "" Then
                If L.Range(.ListColumns(Spalte).Index) > ListMax Then ListMax = L.Range(.ListColumns(Spalte).Index).Value
            End If
        Next
    End With
End Function
VG
Yal
Anzeige
AW: Nun ja, doch ein bisschen zu schnell
08.03.2023 22:49:23
Dieter
Hallo Yal,
vielen Dank für deinen Beitrag.
Leider habe ich aber nicht viel verstanden, wo diese 3 Codes eingefügt werden sollen.
Könntest du mir bitte helfen?
Ich dachte, dass mein Userform-Code abgeändert wird.
Eine Buchung löschen möchte ich im Falle, wenn ein Artikel nicht verkauft und gutgeschrieben wird, dann soll er wieder im Lagerbestand verfügbar sein.
LG Dieter
AW: Nun ja, doch ein bisschen zu schnell
08.03.2023 23:10:46
Yal
Ach so!
ja, man könnte auch ganz einfach
    Cells(last, 14).Value = WorksheetFunction.Max(Range("N:N")) + 1
in CommandButton_Buchung_Click einfügen.
Ich habe ein bischen zu umfangreich gedacht.
VG
Yal
Anzeige
AW: Nun ja, doch ein bisschen zu schnell
09.03.2023 00:09:47
Dieter
Vielen Dank Yal,
das ist die Lösung!!!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige