VBA in Excel: Datumseingabe in einem Formular mit Datensätzen in der Tabelle abgleichen? ?
Hallo zusammen,
Wie in den Screenshots zu sehen, programmiere ich aktuell eine Fahrradreservierung in Excel. Es ist soweit alles fertig, bis auf einen Code.
Folgender Code fehlt mir. Im Formular soll man die Daten der gewünschten Ausleihe eintragen (4 Felder --> Abholdatum und -zeit, sowie Rückgabedatum und - zeit). Danach soll mit Klick auf den Button "Verfügbarkeit prüfen" in der ListBox (unter den Eingabefeldern) die Fahrräder angezeigt werden, die an den angefragten Zeitpunkten noch verfügbar sind.
Die vorhandenen Datensätze (die geprüft werden müssen) befinden sich in Tabelle1.
Folgende Fahrräder gibt es allgemein: Dienstfahrrad 1 Dienstfahrrad 2 Klapprad Pedelec 1 Pedelec 2
Meine Bezeichnungen in UserForm 1: 1.TextBox hinter "Abholdatum" = Textbox4 2.TextBox hinter "Abholuhrzeit" = Textbox5 3.TextBox hinter "Rückgabedatum" = Textbox6 4.TextBox hinter "Rückgabeuhrzeit" = Textbox8 5.Button "Verfügbarkeit prüfen" = CommandButton5 6.Listbox mit verfügbaren Fahrrädern = ListBox2
Ich hoffe, mir kann da einer helfen und/oder sogar einen Code schicken.
Danke im Voraus!


2 Antworten
Ich schaue mal... Habe grade kein Excel vor mir.
Ich würde eine Spalte in Excel erstellen, wo irgendwie die Verfügbarkeit vermerkt ist. 1 = ausgeliehen, 0 = verfügbar.
Dann brauchst du nur noch über eine Schleife das ganze abprüfen.
An deiner Stelle würde ich aber die Steuerelemente umbenennen. Nix ist schlimmer als Textbox1 oder Listbox679
txtADatum für txt(box)A(bgabe)Datum
txtAZeit
Etc.
Ist wesentlich besser und lesbarer beim coden und für andere, die den Code mal lesen sollten. Oder du... In ein paar Jahren
Ich kann dir das nicht schicken, da ich kein Excel vor mir habe. Aber eigentlich sollte das kein Problem sein. Wie die Liste zu füllen ist, hast du schon? Dann brauchst du ja nur noch das in ein "if" packen (wenn Zelle =0 dann).
Oh, sorry. Das ist der perfekte Weg!
Mit der Formel, dass da ne 1 oder 0 steht ist kein Problem.
Könnte mir aber einer den VBA-Code für die ListBox schicken, dass alle Fahrräder mit einer 0 in Spalte X angezeigt werden?
Danke im Voraus
Besten Dank für die nette und vor allem schnelle Antwort!
Mit einer Relationsspalte ist mein Problem leider nicht lösbar, da sich das Datum von Buchung zu Buchung immer ändert und man das immer neu eingibt.
Excel ist für Datenbankanwendungen nicht besonders gut geeignet.
Hast du die Fahrräder in einer eigenen Tabelle?
Und die Ausleihdaten auch?
Mit welcher Excel-Version arbeitest du? Vielleicht gibt es dort schon einen DateTimePicker - dann kannst du die Eingabe von Datum und Uhrzeit zusammenfassen (und gleichzeitig ohne eigenen Code sicherstellen, dass nur gültige Einträge vorgenommen werden können).
Eine TextBox hat auch eine DataSource-Eigenschaft, mit der sichergestellt wird, dass ihr Inhalt gleich einer bestimmten Zelle ist. Die kann auch vom Programm gesetzt werden. (Hat bei deiner Excel-Version vielleicht einen anderen Namen.)
Das "Verfügbarkeit prüfen" würde ich nicht mit einem Button auslösen lassen, sondern von einer Änderung von Datum/Uhrzeit. (Die Prüfung abbrechen, wenn einer der nötigen Werte fehlt.)
Ich würde 3 Tabellen nehmen:
- Personen (wie deine jetzige Tabelle1, ggf. mit einer Zusatzspalte "KdNr" o. ä. am Anfang)
- Fahrräder (Spalten "ID" oder "lfdNr", Art ("Dienstfahrrad", "Pedelec", ...), NrInKategorie (1, 2)
- Ausleihen (Spalten PersonNr, FahrradNr, Abholzeit, Rückgabezeit)
Verfügbarkeit Prüfen (Pseudocode):
Alle Fahrräder in Liste aufnehmen
Für alle "Ausleihe" in Ausleihen
Falls (Ausleihe.Daten und Anfrage.Daten sich überschneiden)
Falls Ausleihe.Fahrrad = Anfrage.Fahrrad
Fahrrad aus Liste entfernen
Falls Ausleihe.Person = Anfrage.Person
Rückfrage "Sind Sie sicher, dass die Person mehrere Fahrräder haben will/darf?"
Man kann die Ausleihen noch nach Abholzeit sortieren, das beschleunigt die Suche, verlangsamt aber die Aufnahme einer neuen Ausleihe
Hallo,
Erstmal vielen Dank für die ausführliche Beantwortung.
Deine Vorschläge klingen echt super und für mich auch nachvollziehbar, jedoch komme ich ja nicht mal mit der Programmierung von meiner einfachen Art klar :D
Ich glaube nicht dass ich deine Vorschläge in die Realität umsetzen kann, es sei denn, du hast die Zeit mir die COdes zu schicken :D
Bitte, bitte. Ich verstehe es noch nicht ganz. Entweder ist ein Rad ausgeliehen oder es ist zur Verfügung. Reservierung gibt es ja nicht. Also könnte man, sobald ein Rad ausgeliehen wird in eine zusätzliche Spalte eine 1 eintragen. Und sobald das rad wieder da ist, wird dort eine 0 eingetragen. Und in dem Code für die verfügbaren Räder (die in die listbox angezeigt werden sollen) sagt man eben "Gehe alle Zeilen durch und schaue ob 0. wenn ja, zeige es an"