Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1444to1448
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
VBA: Fortlfd Zellen kopieren + Zahlenblöcke
15.09.2015 18:10:42
Chris
Hallo,
ich mache für die Arbeit gerade eine etwas umfangreichere Excel-Tabelle und habe zur einfacheren Handhabung ein Userform mittel VBA erstellt.
Die Tabelle hat mehrere Spalten in die diverse Informationen über das userform eingetragen werden. Die erste Spalte ist eine laufende Nummer, die zweite Spalte das aktuelle Datum etc. .
Um die Nutzung noch mehr zu vereinfachen habe ich es so programmiert das die lfd. Nummer automatisch erstellt wird, gegebenfalls aber noch manuell abgeändert werden kann. Genauso wird das Datum automatisch generiert.
Schaltflächen sind "Neuer Eintrag", "Speichern", "Löschen" und "Beenden".
Mein Problem:
1) Ich benötige die gleiche lfd. Nummer manchmal zwei oder dreimal (z.B. 3 Zeilen die 23) und dann wieder fortlaufend. Die fortlfd. Nummer wird in das Textfeld und die Zelle geschrieben wenn auf "Neuer Eintrag" geklickt wird. Gibt es hier eine Möglichkeit die letzte generierte Nummer über einen neuen CommandButton bei jeden Click in das nächste Feld zu schreiben, praktisch ein "Blockeintrag"? Es sollte die Nummer gleich in das Textfeld gezogen werden + direkte Ausgabe in der Excel Tabelle.
2) Ich habe eine Spalte in welcher eine Nummer generiert werden soll. Diese Nummer muss nicht in jeder Zeile generiert werden, allerdings immer fortlaufend. Deswegen wollte ich dort auch einen CommandButton nehmen und die Nummer in das Textfeld einfügen lassen. Allerdings hänge ich an dem Problem das die Nummer nicht in jeder Zeile steht, sondern unregelmässig. Gibt es da eine Merkfunktion, oder einen Code welcher die letzte Nummer in der Spalte sucht und diese dann +1 addiert?
3) Eine Spalte hat drei Vorgaben in Textform. Ich würde gerne für jede Vorgabe einen CommandButton machen die alle drei in das selbe Textfeld schreiben.
Ich kann keinen Stand der Liste hochladen, da es wie schon erwähnt eine beruflich bezogene Arbeit ist.

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Fortlfd Zellen kopieren + Zahlenblöcke
16.09.2015 14:19:33
fcs
Hallo Chris,
zu 1) gleiche oder fortlaufende Nr
hier könntest du eine Checkbox (oder 2 Optionsschaltflächen) einbauen mit der du wählst, ob die gleiche Nummer oder die fortlaufende Nummer eingetragen werden soll. Das muss dann im Code der "Neuer Eintrag" schaltfläche in einer If ... Then ... Else ... End If Anweisung verarbeitet werden.
zu 2) letzte Nummer hochzählen.
Auch steuerst du über eine Checkbox, ob die nächste Nummer eingetragen werden soll oder nicht
zu 3) benutze hier eine Listbox mit den 3 Auswahlwerten.
zu 1) und 2) könnte der Code beispielhaft etwa wie folgt aussehen.
Gruß
Franz
Private Const CheckBox1 As Boolean = True 'Testwert für Simulation Checkbox
Private Const CheckBox2 As Boolean = True 'Testwert für Simulation Checkbox
Sub CommandbuttonNeu_Click()
Dim wks As Worksheet
Dim Zeile As Long, Zeile2 As Long, Spalte As Long
Set wks = ActiveSheet
With wks
Spalte = 1 ' Spalte A = Spalte mit Nr. in jeder Zeile
Zeile = .Cells(.Rows.Count, Spalte).End(xlUp).Row + 1
If Zeile = 2 Then
.Cells(Zeile, Spalte) = 1 'Startnummer
Else
If CheckBox1 = True Then
'Nummer erhöhen
.Cells(Zeile, Spalte) = Application.WorksheetFunction.Max( _
.Range(.Cells(2, Spalte), .Cells(Zeile - 1, Spalte))) + 1
Else
'Nummer wiederholen
.Cells(Zeile, Spalte) = .Cells(Zeile - 1, Spalte).Value
End If
End If
Spalte = 3 'Spalte C = Spalte in der nächste fortlaufende Nr. eingetragen werden soll
Zeile2 = .Cells(.Rows.Count, Spalte).End(xlUp).Row + 1 '1 = Spalte mit lfd.Nr. in jeder  _
Zeile
If CheckBox2 = True Then
'Nummer erhöhen
If Zeile2 = 4 Then '2 = 1. Zeile unter den Spaltentiteln
.Cells(Zeile, Spalte) = 1
Else
.Cells(Zeile, Spalte).Value = .Cells(.Rows.Count, Spalte).End(xlUp).Value + 1
End If
Else
'keine Nummer eintragen
.Cells(Zeile, Spalte).ClearContents
End If
End With
End Sub

Anzeige
AW: VBA: Fortlfd Zellen kopieren + Zahlenblöcke
16.09.2015 15:03:05
Chris
Hallo Franz,
Danke für Deinen Beitrag und Deine Code-Empfehlung.
Das mit der lfd. Nummer werde ich nochmal ausprobieren.
Da ich etwas in Zeitdruck war und ich diese komplexe Liste anwendbar auch für nicht Excel-Cracks morgen präsentieren muss, habe ich gestern Abend selber nochmal versucht die Probleme zu lösen. Für 3) habe ich einfach drei CommandButtons genommen und lasse das Text.Caption der Buttons in das Textfeld schreiben und speichern wie gehabt über "Speichern".
Für 2) hatte ich folgenden Code geschrieben:
Private Sub CommandButton8_Click()
Dim Ende As Long
With ActiveSheet
Ende = Cells(Rows.Count, 5).End(xlUp).Row
UserForm1.TextBox5.Text = Tabelle1.Cells(Ende, 5).Value + 1
Funktionsweise:
Es muss mindestens ein Wert in Spalte 5 geschrieben werden. Ist dies der Fall lasse ich über den Code die Spalte absuchen bis er den letzten Eintrag gefunden hat. Dadurch das dann die Zeile bekannt ist und für diesen Moment "Ende = Zeile letzter Eintrag" ist, lasse ich mit dieser Zuweisung per Tabelle1.Cells(Ende, 5).Value den Wert in dieser Zeile + 1 in die Textbox schreiben und speichern wie gehabt wenn "Speichern" gedrückt wird.
Ich habe jetzt nur ein Problem:
Ich habe diesen Code auf eine nicht als Tabelle formartierte Liste einer ganz frühen Version der heutigen Tabelle angewendet und es funktionierte. Heute wollte ich im Büro diesen Teil in die finale Version übernehmen und er schreibt mir in das Textfeld jedesmal nur eine 1, auch wenn schon z.B. 55 dort eingetragen ist und es dann normal 56 sein müsste. Das Sheet ist jetzt im Vergleich zu vorher als Tabelle formatiert, ich bin mir nicht sicher ob dann im Code nochmal was angepasst werden muss. Die Zellenangaben und Textfeldangaben wurden alle an die richtige Liste angepasst. Bei der Fehlersuche kam heraus:
Wenn ich +1 im Code raus nehme, wird nichts in das Textfeld geschrieben, obwohl zumindest der aktuell letzte Wert der Spalte geschrieben werden müsste, d.h. der Code läuft entweder nicht (obwohl keine Fehlermeldung kommt), oder er findet aus irgendeinen Grund nichts und addiert dann jedesmal nur die 1. Vielleicht eine Idee voran das liegen kann? Wie gesagt in einer nicht als Tabelle formatierten Liste läuft der Code, nach der Formatierung nicht mehr.
Ich bin leider kein VBA-Experte, kenne mich aber mit C++ aus, was das begreifen des Codes beschleunigt, weil viele Sachen verwandt, ähnlich oder gleich sind. Hier komme ich aber nicht drauf was der Fehler sein könnte.
Grüße
Chris

Anzeige
AW: VBA: Fortlfd Zellen kopieren + Zahlenblöcke
16.09.2015 21:01:28
fcs
Hallo Chris,
die als Tabelle formatierten Bereiche verhalten sich wie kleine Inseln im Tabellenblatt.
unter anderem funktioniert
Zeile_L = Cells(Rows.Count, Spalte).End(xlUp).Row
nicht wie gewohnt. Es wird immer die letzte Zeile des Tabellenbereichs als Zeile zurückgegeben, egal ob die Zelle leer ist oder ausgefüllt.
Man muss wenn die Zelle in der letzten Zeile leer ist, die Anweisung nochmals ausführen, um zum Ziel zu kommen.
Gruß
Franz
Private Sub CommandButton8_Click()
Dim Ende As Long
With Tabelle1
Ende = .Cells(.Rows.Count, 5).End(xlUp).Row
If IsEmpty(.Cells(Ende, 5)) Then
Ende = .Cells(Ende, 5).End(xlUp).Row
End If
If Ende >= .ListObjects(1).DataBodyRange.Row Then
UserForm1.TextBox5.Value = .Cells(Ende, 5).Value + 1
Else
UserForm1.TextBox5.Text = 1
End If
End With
'usw.

Anzeige

326 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige