Registriert seit: 18.11.2019
Version(en): 2016
Hallo clever - excel - forum,
ich habe ein kleines Problem mit fortlaufender Nummerierung. Folgendes Makro habe ich gefunden und es funktioniert auch soweit einwandfrei, wenn eine Zahl bereits in der entsprechenden Spalte steht. Ist die Spalte jedoch noch leer, dann kommt eine Fehlermeldung.
Hier erstmal das Makro:
Private Sub UserForm_Initialize() Dim lngZeile As Long With Worksheets("Tabelle1") lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row TextBox1.Value = .Cells(lngZeile, 1).Value + 1 End With End Sub
Wie kann ich nun das Makro erweitern, damit wenn keine Zahl in der Spalte steht, es mit 1 beginnt?
Ich bin für jede Hilfe dankbar.
Peter
Registriert seit: 05.11.2019
Version(en): 2010, 2019
07.12.2019, 19:53
(Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2019, 19:54 von JereMaia.)
Ich würde es so umcoden: (nicht getestet) Code: Private Sub UserForm_Initialize() Dim lngZeile As Long With Worksheets("Tabelle1") lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row if(lngZeile<0) then lngZeile = 1 TextBox1.Value = lngZeile End With End Sub
Registriert seit: 18.11.2019
Version(en): 2016
Hallo JereMaia,
funktioniert nicht so ganz, das Makro beginnt jetzt immer bei 2 an zu zählen.
MfG Peter
Registriert seit: 05.11.2019
Version(en): 2010, 2019
ändere mal folgende Zeile aB..
if(lngZeile<0) then lngZeile = 0
Registriert seit: 18.11.2019
Version(en): 2016
Hallo JereMaia, funktioniert immer noch nicht so ganz, das Makro beginnt jetzt immer bei 2 an zu zählen, und zählt nicht mehr hoch. Code: lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
sucht die letzte Zeile in der Spalte Code: if(lngZeile<0) then lngZeile = 0
dieser Teil sagt doch aus, wenn der Inhalt kleiner 0, dann 0 Aber es kommt immer eine 2 heraus. Ein weiterzählen (+1) fehlt! MfG Peter
Registriert seit: 05.11.2019
Version(en): 2010, 2019
07.12.2019, 20:34
(Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2019, 20:43 von JereMaia.)
Ich glaube ich habe dich falsch verstanden. Ich habe dasganze bei mir getestet, allerdings den Wert gleich in eine Zelle schreiben lassen. Deshalb zählte es bei mir automatisch hoch. Du verwendets eine UserForm. Code: Private Sub UserForm_Initialize() Dim lngZeile As Long Dim Wert as long With Worksheets("Tabelle1") lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row if(lngZeile = 0) then lngzeile = 1 Wert = .Cells(lngZeile, 1).Value + 1 TextBox1.Value = Wert End With End Sub
Registriert seit: 18.11.2019
Version(en): 2016
Hallo JereMaia,
ja, ich benutze eine Userform.
Denoch vielen Dank.
Registriert seit: 05.11.2019
Version(en): 2010, 2019
07.12.2019, 20:43
(Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2019, 20:43 von JereMaia.)
Das ganze ist etwas tricky. Bei Deinem Code passiert glaube ich folgendes: Wenn nichts in der Spalte steht dann ist der Wert in lngzeile = 0. Und dann will er den Wert aus der zelle (0,1) lesen und ich glaube da passiert dann der Fehler. Deshalb müsste man in diesem speziellen Fall die Zeile auf 1 setzen damit der die Zelle (1,1) ausliest.
Registriert seit: 02.05.2018
Version(en): Excel 365 & 2016
07.12.2019, 22:28
(Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2019, 22:29 von MisterBurns.)
Hallo, das Problem hätte man analysieren können, indem man den Code schrittweise mit F8 durchgegangen wäre. Dann hätte man erkannt, dass lngZeile nicht den Wert 0 annimmt, sondern 1. Allerdings ist der Wert des Inhalts von Zelle A1 nicht 0, sondern "" (also ein Leerstring). Und zu einem String kann man nichts addieren. Frage also ab, ob in A1 etwas drinsteht oder nicht: Code: Private Sub UserForm_Initialize() Dim lngZeile As Long, Wert As Long With Worksheets("Tabelle1") lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row If .Cells(lngZeile, 8).Value = "" Then Wert = 0 Else Wert = .Cells(lngZeile, 1).Value End If TextBox1.Value = Wert + 1 End With End Sub
Achtung: Der Code hinterfragt nicht, ob in der Zelle eine Zahl steht. Enthält diese Zelle Text, wird VBA meckern. Alternativ - und kürzer - kann man den Leerstring auch in eine Zahl umwandeln: Code: Private Sub UserForm_Initialize() Dim lngZeile As Long With Worksheets("Tabelle1") lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row TextBox1.Value = CLng(.Cells(lngZeile, 1).Value) + 1 End With End Sub
Schöne Grüße Berni
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo den Fall einfach so abfangen, der kommt ja nur vor wenn die erste Zelle leer ist. mfg Gast 123 Code: Private Sub UserForm_Initialize() Dim lngZeile As Long Dim Wert As Long With Worksheets("Tabelle1") lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row Wert = .Cells(lngZeile, 1).Value + 1 If lngZeile = 1 And Wert = 0 Then Wert = 1: .Cells(1, 1).Value = 1 End If TextBox1.Value = Wert End With End Sub
|