VBA in Excel: Datumseingabe in einem Formular mit Datensätzen in der Tabelle abgleichen? ?

Formular - (programmieren, Microsoft Excel, VBA) Tabelle1 - (programmieren, Microsoft Excel, VBA)

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


Dennisthek1nq 
Beitragsersteller
 21.12.2016, 10:08

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.

0
Garfield0001  21.12.2016, 10:34

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"

0
Dennisthek1nq 
Beitragsersteller
 21.12.2016, 14:42
@Garfield0001

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

0
Garfield0001  21.12.2016, 14:54

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).

0

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

Woher ich das weiß:Berufserfahrung – Software-Entwickler

Dennisthek1nq 
Beitragsersteller
 21.12.2016, 14:52

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

0