Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1968to1972
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

Eingabemaske mit VBA - Sortieren nach Datum

Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 10:53:17
Torben71
Hallo zusammen,

Dies ist mein erster Beitrag und nehmt es mir bitte nicht übel, wenn ich etwas vergesse bzw. nicht beachtet habe.

Ich schreibe zur Zeit an einer Eingabemaske für eine Controlling Liste unserer Veranstaltungen (arbeite in der Eventbranche). Dies ist mir auch semi gut gelungen.
Alle Felder werden von der Eingabemaske beschrieben und in einer Tabelle aufgeführt.
Mein einziges Problem, das ich auch nach einer Suche etlicher Tutorials nicht lösen konnte, ist die Sortierung.

Im Moment werden die Eingaben einfach in die nächste freie Zeile geschrieben. Ich habe jedoch in meiner Tabelle schon ein komplettes Jahr (also 01.01.24 fortlaufend) mit Datum hinterlegt. Wenn ich jetzt in meiner Eingabemaske die Felder "Veranstaltung" "Datum" "Anlass" "Personenanzahl" etc. eingebe, wäre es super, wenn die Veranstaltung sich dem richtigen Datum in der Tabelle zuordnet (und nicht in die nächste Zeile).

Ich bräuchte also den richtigen Code für "ordne dich dem passenden Datum zu", anstatt:

Private Sub CommandButton1_Click()
Dim lZeile As Long
lZeile = 4
Do While Trim(CStr(Tabelle5.Cells(lZeile, 1).Value)) > ""
lZeile = lZeile + 1
Loop
Tabelle5.Cells(lZeile, 1) = CStr("Neuer Eintrag Zeile " & lZeile)
ListBox1.AddItem CStr("Neuer Eintrag Zeile " & lZeile)
ListBox1.ListIndex = ListBox1.ListCount - 1
End Sub

Ich hoffe, ich habe das Problem gut beschrieben, da ich die Excel Liste leider nicht posten kann (enthält schon relevante Daten).

Vielen Dank im Voraus

LG Torben

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 10:58:04
Oberschlumpf
Hi Torben,

"...da ich die Excel Liste leider nicht posten kann (enthält schon relevante Daten)..."

Aber du könntest bitte eine BSP-Datei mit genügend BSP-Daten erstellen und diese uns dann per Upload zeigen.
So werden auch..ähh...relevante Daten...nicht veröffentlicht.

Zumindest ich kann ohne Bsp-Datei von dir nicht helfen - aber wer weiß - oft gibt es Helfer, die das auch ohne Datei von dir hinbekommen.

Ciao
Thorsten
AW: Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 11:27:00
Piet
Hallo

wir suchen die LastZell nicht per Do Loop Schleife, sondern über Cells(Rows.Count,1).End(xlUp).Row +1

Nach dem einfügen kann man die Liste neu sortieren. Da wäre es aber sinnvoll statt den Text "neuer Eintrag" den neuen Namen aus einer TextBox in Tabelle5 einzufügen, und die gesamte Tabelle nach der Namensspalte neu sortieren. Ich benutze dazu gerne die alte Excel 2003 Methode, sie ist kürzer zu programmieren.

Zu Bedenken ist, das der neue Name dann nicht mehr an letzter Stelle steht. Da wäre es sinnvoll das Listenfeld neu zu laden!

mfg Piet

Private Sub CommandButton1_Click()

Dim lZeile As Long
lZeile = Tabelle5.Cells(Rows.Count, 1).End(xlUp).Row + 1
Tabelle5.Cells(lZeile, 1) = CStr("Neuer Eintrag Zeile " & lZeile)
ListBox1.AddItem CStr("Neuer Eintrag Zeile " & lZeile)
ListBox1.ListIndex = ListBox1.ListCount - 1

'Tabelle5 neu sortieren
'Range + Sortieradresse bitte selbst einfügen!!
Tabelle5.Range("A3:XX" & lZeile + 1).Sort Key1:=Tabelle5.Range("XXX"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
Anzeige
AW: Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 11:30:46
Piet
Nachtrag

alternativ kann man mit einem Suchlauf vor dem Einfügen die Stelle in Tabelle5 suchen, wo die neuen Daten eingefügt werden sollen, und dort eine neue Zeile einfügen. Dann die neuen Werte dort einfügen. Danach sollte man aber das Listenfeld auch neu laden. Ist sinnvoller als die neue Zeile anzugeben. Zum Programmieren kaum Mehraufwand.

mfg Piet
AW: Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 11:19:07
Zahlendreher
Hallo!

D. h. du brauchst eigentlich nur die Zeilennummer, in der das Datum steht, damit die anderen Daten daneben eingefügt werden können. Das bekommst du z. B. so:

Tabelle1.Columns("A").Find(Date, , LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Row

Date ersetzt du dann mit deiner Variable.

Beste Grüße
Anzeige
AW: Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 11:38:30
Torben71
Hallo Oberschlumpf,

Danke für deine Antwort. Ich habe jetzt eine BSP-Datei hochgeladen. Bin mir nicht sicher, ob mein Code noch funktioniert, da der Tabellenbezug nicht mehr stimmen müsste, aber es sollte klar werden was ich mit Datum Zuordnung gemeint habe.

LG Torben
AW: Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 11:52:49
Piet
Hallo

wir sehen keine Beispieldatei in deinem Thread. Du musst di Datei im PC suchen, dann Beispieldatei hochladen abklicken.
Dann siehst du einen Link, den du in deine Antwort kopieren musst. Ohne kopieren funktioniert das hochladen nicht!!

mfg Piet
AW: Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 12:54:55
Torben71
Ah sorry! Hab den Link nicht dazu geschrieben:

https://www.herber.de/bbs/user/168218.xlsm

Nochmals danke!
Anzeige
AW: Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 13:23:32
Alwin Weisangler
Hallo Torben,

der Aufbau ist sehr unglücklich angelegt. Man kann zwar mit viel Aufwand ein funktionierendes Userform bauen, aber besser ist es eine durchgängige Tabelle für alle Termine anzulegen und des Weiteren eine eigenständige Auswertungstabelle anlegen, deren Ausgabe per Monatsauswahl funktioniert.

Gruß Uwe
AW: Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 13:39:10
Torben71
Hallo Uwe,

Ja, der Aufbau ist leider eine Vorgabe.
Die Tabelle wird auch noch von anderen Abteilungen genutzt, die zB. damit sehen welche Termine dann noch vergeben werden können (deswegen die Abbildung des kompletten Jahres) und exisitert in dieser Form schon länger (habe jetzt nur 2024 drin gelassen).
Die Eingabemaske Idee kam mir erst jetzt, da viele Zellen mit Formeln hinterlegt sind und wir z.B immer das Problem hatten, das Mitarbeiter "ausversehen" ihre Daten in die falsche Zelle eintragen und somit die Formeln löschen.
Mit der Eingabemaske hatte ich gehofft, dass ganze zu vereinfachen und sicherer zu machen.
Aber ja, die muss leider genau auf die Vorgabe angepasst werden und mein VBA Wissen beschränkt sich auf Turtorial folgen und hoffen es klappt.

Lg Torben
Anzeige
AW: Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 13:58:52
Alwin Weisangler
Hallo Torben,

schau mal nur um die existierenden Veranstaltungen in die Listbox zu bekommen, wäre diese Streckübung erforderlich.


Option Explicit
Option Compare Text
Dim arrList()
Private Const StartZeile As Long = 4

Private Sub LbLaden()
Dim i&, j&, k&
ReDim arrList(1 To 46, 1 To 440)
With Tabelle5
For i = StartZeile To 440
If .Cells(i, 1) > "" And Not .Cells(i, 2) = "pro Veranstaltung" And Not .Cells(i, 2) = "Summe" _
And Not .Cells(i, 1) = "VA" And Not .Cells(i, 1) = "Februar" And Not .Cells(i, 1) = "März" _
And Not .Cells(i, 1) = "April" And Not .Cells(i, 1) = "Mai" And Not .Cells(i, 1) = "Juni" _
And Not .Cells(i, 1) = "Juli" And Not .Cells(i, 1) = "August" And Not .Cells(i, 1) = "September" _
And Not .Cells(i, 1) = "Oktober" And Not .Cells(i, 1) = "November" And Not .Cells(i, 1) = "Dezember" Then
k = k + 1
arrList(1, k) = i
For j = 2 To 46
arrList(j, k) = .Cells(i, j - 1)
Next j
End If
Next i
ReDim Preserve arrList(1 To 46, 1 To k)
ListBox1.List = Application.Transpose(arrList)
End With
End Sub

Private Sub UserForm_Initialize()
LbLaden
End Sub


Gruß Uwe
Anzeige
AW: Eingabemaske mit VBA - Sortieren nach Datum
21.03.2024 14:44:31
Alwin Weisangler
zu deiner 2. Problematik Datum finden:

der hier gangbare Weg wäre es die Zeile für das gesuchte Datum mit Application.Match zu finden.


Private Sub CommandButton1_Click()
Dim iZeile As Variant
With Tabelle5
iZeile = Application.Match(CLng(CDate(TextBox2)), .Columns(2), 0)
If Not IsError(iZeile) Then
.Cells(iZeile, 1) = TextBox1
.Cells(iZeile, 3) = TextBox3
.Cells(iZeile, 4) = TextBox4
' Rest selbst einbauen
Else
MsgBox "Datum exixtiert nicht", vbInformation, "Datumsfehler"
End If
End With
End Sub

https://www.herber.de/bbs/user/168224.xlsm
Gruß Uwe
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige