PDA

Vollständige Version anzeigen : Daten aus Tabelle in Userform und zurück speichern


olerostock
21.07.2014, 12:30
Hallo an die fleißigen Helfer.

Erst einmal ein Dankeschön an alle, die mir bis jetzt geholfen haben.
Nun habe ich da ein Problem und komme wirklich nicht weiter. Ich habe hier eine Excel-Datei mit einer Tabelle "Start", hier werden die Userformen gestartet, eine Tabelle "Daten", hier werden die Daten die erfasst werden weggeschrieben und eine Tabelle "Bezug". Hier stehen die Daten die ich für die unterschiedlichen ComboBoxen in der Userform "Erfassung" benötige. Über "Erfassung" gebe ich Daten ein und schreibe sie in die Tabelle Daten. Nun habe ich eine weitere Userform "Bearbeitung". Hier möchte ich die Daten aus der Tabelle "Daten" zurückholen und bearbeiten. Dieses soll über vier ComboBoxen geschehen. 1. PLZ, 2. Ort, 3. Straße und 4. Hausnummer. Die Werte dazu stehen in der Tabelle "Daten" in den Spalten C bis F. Nun soll wenn über ComboBox 1 die Postleitzahl gewählt wird (kommen mehrfach vor, sollen nur einmal angezeigt werden), in Combobox 2 die Orte (können mehrere zu einer Postleitzahl sein) angezeigt und ausgewählt werden. Dann soll zum ausgewählten Ort in Combobox 3 die Strassen ausgewählt werden und über Combobox 4 die Hausnummern. Wenn die Hausnummer ausgewählt wurde, dann sollen die Werte aus der Tabelle "Daten" ab Spalte A bis Aj in die Textboxen 1 bis 36 geladen werden. Wenn daten geändert wurden, dann soll über Speichern die Werte wieder in die jeweilige Zeile der Tabelle "Daten" zurück geschrieben werden. Die Datei "Erfassung Bearbeitung" ist mit bei.
Ich weiß, das ist alles ein bischen viel. Aber vielleicht ist einer unter Euch, der mir da helfen könnte.

Danke schon mal im Vorraus.

Gruß Olerostock

MWOnline
21.07.2014, 12:45
Hallöchen,

ich habe mal kurz reingeschaut, dort ist ja noch einiges zu tun!!!
Hier mal ein Beispiel (http://www.online-vba.de/vba_tutorialuserform.php) für eine einfache UserForm in Excel. Vielleicht helfen Dir die Quelltextbeispiele bei der eigenen Programmierung weiter? Zumindest kannst Du Dir dort die Vorgehensweise abschauen ;)

Beste Grüße und Viel Erfolg
Marc

olerostock
21.07.2014, 12:55
Hallo Marc,

Danke für den Tip. ich habe mir das mal angeschaut. Das Problem bei mir ist, das ich nicht über eine Listbox gehen kann, weil in der Tabelle Daten über 1000 Einträge sein könnten. Ich bräuchte das über die ComboBoxen. Für die Userform "Buchung" glaube ich, dass ich das danach schon irgenwie hin bekomme. Ich brauche da nur den Anstoß zu der Auswahl in den 4 Comboboxen, das eintragen der daten in die Textboxen und das zurückschreiben in die Tabelle.

Olerostock

MWOnline
21.07.2014, 12:57
Hallöchen,

ComboBoxen kannst Du genauso ansprechen wie eine ListBox. In Deinem Fall must Du den entsprechenden IF Block dann um 3-4 ComboBoxen erweitern und nicht nur eine wie in meinem Beispiel.

Du kannst Dir auch folgendes Beispiel (http://www.online-vba.de/vba_abhcomboboxen.php) anschauen wie man ComboBoxen in Abhängigkeit zueinander bringt.

Beste Grüße und Viel Erfolg
Marc

olerostock
21.07.2014, 13:28
Hallo Marc,

ich habe den Code Deiner Beispieldatei bei mir übernommen und entsprechend meinen ComboBoxen angepasst.Leider bekomme ich keine Auswahl hin.
Die geänderte Datei liegt bei. Kannst Du mir sagen wo ich den Fehler gemacht habe?

Danke
Olerostock

MWOnline
21.07.2014, 13:40
Hallöchen,

dort sind einige Probleme drin.

Die Prozedur UserForm_Initialize darf nicht umbenannt werden zu Bearbeitung_Initialze.
Der Aufruf der FillComboBox darf nicht 13 sondern nur 1 sein.

Private Sub UserForm_Initialize()
Call FillComboBox1

Denn bei der Übergabe must Du das Objekt übergeben, nicht "Daten" sondern Tabelle7 in Deinem Fall.
Call MWFillComboBoxFromTableColumn(Tabelle7, 3, ComboBox1)
Dieses kommt an mehreren Stellen vor!

Die Unterroutine ist nur für 2 Bedingungen ausgelegt, hier müsstest Du diese noch erweitern um 2 weitere Parameter um die 3. Bedingung mit einzuarbeiten. Ich habe einfach die 3. Bedingung gelöscht, anschließend haben die ersten 3 ComboBoxen funktioniert.

Ich kann nur dringstens empfehlen, dass wenn Du dieses Projekt weiter entwickeln möchtest, Dich zuerst mit den Grundlagen von VBA zu beschäftigen. Denn es wird nicht weniger und einfacher bis diese Oberflächen vollständig fertig sind ;) Und ich denke, Du planst noch einige Funktionen ;)

Beste Grüße und Viel Erfolg
Marc

olerostock
21.07.2014, 14:02
Hallo Marc,

ich habe nun den Code angeglichen und ich bekomme in der ComboBox 1 eine Auswahl. In ComboBox 2 zeigt er mir aber nur einen Wert an, obwohl es mehrere Einträge gibt zur Auswahl in ComboBox1. Die Datei liegt bei. Habe ich etwas in den Bedingungen falsch gemacht?

Gruß olerostock

MWOnline
21.07.2014, 14:11
Hallöchen!

Das ist auch logisch, denn ComboBox2 in Abhängigkeit zur 1. gebracht wird. Wenn Du eine PLZ aussuchst in ComboBox1 werden in 2 nur die Werte angezeigt, die in Spalte PLZ die gewählte PLZ enthalten!

Wenn Du eine Suchmaske bauen willlst kannst Du das Beispiel so leider nicht verwenden sondern verwendest wie im 1. Link angezeigt das Befüllen der ListBox... (die ComboBox verhält sich 1:1, der Code passt also auch auf ComboBoxen ;) )

Beste Grüße
Marc

olerostock
21.07.2014, 14:16
Hallo Marc,

Danke! Ich werde mich mal gleich ran machen.

Gruß Olerostock

olerostock
21.07.2014, 14:27
Hallo Marc,

in Deinem Beispiel wird aber davon ausgegangen, dass es genau einmal die NamenID vorkommt. Bei mir kann die Postleitzahl aber mehrfach vorkommen.
Wie verhält es sich dann?

Gruß olerostock

MWOnline
21.07.2014, 14:36
Hallöchen,

Du kannst die Beispiele nicht 1:1 verwenden... Das einmalige bezieht sich auf die ID Spalte nicht auf das Füllen einer ListBox... Das kannst Du dir theoretisch in beiden Beispielcodes abschauen... Du kannst auch die Abhängigkeit des 2. Beispiels rausnehmen und die Boxen ohne Abhängikeit zueinander füllen. Einfach die Bedingungen aus den Übergabe-Parametern löschen.

Beste Grüße
Marc

PS: Ich empfehle Dir wirklich die Grundlagen von VBA bevor Du ein solches Projekt startest. Du findest super viel Online-Literatur zu diesem Thema. Denn nach dem ComboBox füllen kommen andere Aufgaben die nicht einfacher werden...

olerostock
21.07.2014, 14:40
Hallo Marc,

Okay. Ich bin dabei und versuche zu Kombinieren. Mal sehen was draus wird. Ich meldse mich dann noch mal.

Danke bis hierher.

Gruß Olerostock

olerostock
21.07.2014, 15:20
Hallo marc,

ich habe jetzt versucht über die ComboBox1 die Listbox1 (habe ich neu erstellt) zu befüllen. Ich bekomme aber ständig den Laufzeitfehler 381. Eigenschaft von List konnte nicht gesetzt werden. Index des Eigenschaftsfelds ungültig. Wie und wo kann ich dieses ändern? Datei liegt bei.

gruß olerostock

MWOnline
22.07.2014, 06:33
Guten Morgen,

ComboBox1.List = Quelle

Die List Eigenschaft ist eine Möglichkeit auf einen Eintrag der Liste zuzugreifen. Du kannst eine ComboBox nicht mit einem Array so befüllen. Das geht nur mit RowSource oder wie in meinem Beispielquelltext gezeigt mit AddItem.

Beste Grüße
Marc

olerostock
22.07.2014, 06:53
Hallo Marc,

Danke für den Tip. Habe inzwischen den Fehler beseitigt. Ich habe jetzt ein Problem mit der ListBox. Dazu habe ich hier im Forum das Thema "ListBox über ComboBox füllen" eröffnet. Mit meinem Code bringt er mir in die erste Spalte der ListBox die Zeilennummer in der die jeweiligen daten stehen. Dieses möchte ich aber nicht. Wie kann oder muß ich den Code abändern, damit die Zeilennummer nicht mehr mit angezeigt wird, sonder ab Spalte A bis Spalte D der Tabelle Daten.
Vieleicht kannst Du da mal rein schauen.

Ich möchte mich noch mal ganz herzlich Bedanken für Deine Hilfe.

Gruß Olerostock

MWOnline
22.07.2014, 07:09
Hallöchen,

habe mal rein geschaut... ich kann Dir nur empfehlen, Dir mein 1. Beispiel anzuschauen und damit zu experimentieren und dieses immer weiter zu ergänzen und bei einem Ansatz zu bleiben. Dort steht viel Kommentar im Quelltext. In Deinen aktuellen Codes sehe ich viele verschiedene Ansätze, grundsätzlich richtig, aber für einen Einsteiger denke ich, dass es etwas viel Input ist so viele verschiedene neue Befehle auf einmal zu sehen und anwenden zu müssen...

Die nummerierten TextBoxen sind gut, das ist korrekt. Denn diese kannst Du dann später mit einer Schleife befüllen und auslesen...

Da hast Du Dir ja ein großes Einstiegsprojekt ausgedacht :D

Beste Grüße
Marc

olerostock
22.07.2014, 07:19
Hallo Marc,

ich habe mir Dein erstes Beispiel noch mal angeschaut. Das Problem ist, dass Du die NamenID einmalig hast. Bei mir kann in Spalte A aber die PLZ mehrfach vorkommen. Aus diesem Grunde wollte ich die Zeilennummer ausklammern.
Das Projekt ist garnicht so schlimm. Da wurschtel ich mich schon durch. Habe die gleiche Datei als Kopie und dort wird von mir alles auskommentiert, damit ich später weiss, was für was ist.

Gruß Olerostock