Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
124to128
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
124to128
124to128
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Userform, Liste und Eingabefeld

Userform, Liste und Eingabefeld
30.05.2002 17:28:58
Susi
Liebe Excel-Gemeinde,

bin soweit (verzweifelt), daß mein Problem wohl nur mittels einer Userform zu lösen ist. Nur damit habe ich überhaupt keine Erfahrung (Bisher reichte mir immer eine Input-Box).

Nach Anklicken einer Schaltfläche soll der Anwender eine dreistellige Identifikationsnummer (ID) eingeben. Es gibt aber ca. 100 verschiedene. Sie stehen in einer Tabelle in H2:I100. Spalte H enthält die IDs, Spalte I die Bezeichnung im Klartext alphabetisch sortiert. Die IDs, die am häufigsten gebraucht werden, weiß man auswendig, beim Rest müßte man nachschauen können.

Deshalb möchte ich (wohl oder übel) eine Userform, die ein Eingabefeld enthält, in das man die ID, die man kennt, direkt eingeben kann. Wenn es um eine ausgefallene ID geht, soll der Anwender diese aus einer Liste (ListBox oder Combobox?), in der die Klartexte (also die aus Spalte I) stehen, auswählen können. D.h., wenn er den gewünschten Eintrag anklickt soll (nur) die dazugehörende ID (also die aus Spalte H) in das Eingabefeld übernommen werden.

Außerdem werde ich wohl zwei Schaltflächen brauchen, "Abbrechen" und "OK". Wenn "OK" angeklickt wird, soll der Wert der im Eingabefeld steht in die Variable "ID" übernommen werden.

Soweit so gut, nur wie ich das umsetzen kann, dafür brauche ich bitte Eure Hilfestellung.

Liebe Grüße von Susi

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das erschlägt mich ...
30.05.2002 17:59:07
Susi
Lieber Guenter,

Dein Hinweis ist zwar ganz arg lieb, aber ich habe (gestern und heute) schon so viel gelesen (Online-Hilfe, hier im Archiv etc.), ganz ehrlich ich sehe den Wald vor lauter Bäumen nicht mehr. Ich werde - versprochen - mir auch diese Dinge anschauen, aber im Moment brauche ich einfach einen/mehrere konkretere Schubse; wenn mal halt noch nie mit Userform ...

Trotzdem nochmals Danke, Susi

Step by Step ....
30.05.2002 21:49:59
Rolf Kersjes
Hallo Susi,

na dann wollen wir's doch mal step by step versuchen.

Eine Schaltfläche hast du ja schon eingerichtet mit der du ein Makro starten kannst.

Dann mußt du zuerst eine UserForm anlegen:

In der Entwicklungsumgebung machst du das mit Einfügen/Userform.

Dann hast du eine leere Userform mit dem Namen UserForm1 (den Namen lassen wir vorerst mal so, den kannst du später ändern), die du nun mit Elementen füllen musst. Dazu benötigst du die Werkzeugsammlung. Wenn die nicht bereits geöffnet ist findest du die unter Ansicht/Werkzeugsammlung.

Zuerst brauchen wir ein Listenfeld, such mal mit dem Mauszeiger in der Werkzeugsammlung (müsste das 5. Element sein) und klick es an. Jetzt kannst du in der Userform ein Rechteck aufziehen (linke Taste gedrückt und bei gewünschter Größe loslassen). Wenn du dir die Eigenschaften anschaust, entweder bereits links unten im vorhandenen Fenster, oder rechte Maustaste auf das Listenfeld klicken und Eigenschaften auswählen, wirst du den Namen ListBox1 des Listenfeldes sehen.

Unter Eigenschaften findest du auch ColumnCount, da trägst du eine 2 eine und unter RowSource z.B. Tabelle1!A1:B20 ,das ist nun der Tabellenbereich in dem deine Ausgangsdaten stehen.

So nun noch die beiden Schaltflächen. Das kennst du ja bereits von den normalen Schaltflächen. Symbol Befehlsschaltfläche in der Werkzeugsammlung auswählen und in der Userform zwei Schaltflächen ziehen.

Der ersten gibst du (wenn angeklickt) in den Eigenschaften unter 'Name' den Namen cmdOK und unter 'Caption' trägst du OK ein. Die zweite erhält den Namen cmdCancel und Caption Abbruch.

Dann noch mal mit der rechten Maustaste hintereinander mit der rechten Maustaste auf die beiden Befehlsschaltflächen klicken
und auf auf 'Code anzeigen' klicken. Damit sind dann schon die beiden Sub's für die Schaltflächen in dem Klassenmodul der Userform angelegt. Die müssen wir jetzt nur noch füllen.

Dazu müssen wir in das Klassenmodul der Userform mit rechte Maustaste im Projektexplorer auf UserForm1 klicken und Code anzeigen auswählen.

Da musst du nun noch folgendes eintragen:


Die Userform selbst rufst du in der Sub deiner Befehlsschaltfläche mit

Userform1.show

auf.

Ich hoffe ich hab nichts wichtiges vergessen. Wenns nich klappt, melde dich.


Rolf

Anzeige
Super, aber etwas fehlt (glaube ich) ...
30.05.2002 21:59:26
Susi
Hallo Rolf,

daaaaaanke, da mache mich doch sofort noch dran. Wenn ich's beim ersten Durchlesen aber richtig verstanden habe, fehlt noch das Eingabefeld, um geläufige IDs direkt eingeben zu können?

Vielleicht bist Du ja noch im Forum ... ich bastele schon mal meine erste Userform ...

Liebste Grüße, Susi.

... und noch weitere Fragen
30.05.2002 22:37:45
Susi
Hallo Rolf,

macht schon richtig Spaß, weil jetzt komme ich endlich weiter.

Aber zum einen bekomme ich noch einen Fehler, wenn ich keinen Eintrag in der Liste ausgewählt habe und trotzdem auf OK klicke. Laufzeitfehler 381: "Eigenschaft List konnte nicht abgerufen werden. Index des Eigenschaftenfeldes ungültig." Wie kann ich das verhindern?

Zum anderen, in der Tabelle mit den IDs und den Klartexten stehen die IDs in der ersten Spalten, die Texte in der zweiten (ist leider nicht änderbar). Kann man einstellen, daß entweder die Reihenfolge in der Liste andersherum ist, oder nur die zweite Spalte angezeigt wird?

Sorry, daß ich so viele Fragen habe.

Gruß Susi

Anzeige
Eins nach dem anderen...
31.05.2002 09:42:52
Rolf Kersjes
Guten Morgen Susi,

also die Möglichkeit, dass du eine direkte Eingabe auch vorsehen willst, hatte ich vorher so nicht verstanden. Lösungsvorschlag:

Zusätzlich plazierst du noch ein Textfeld mit der Werkzeugsammlung in die vorhandene Userform. Das Ding heisst dann automatisch TextBox1. Mit Klick der rechten Maustaste auf die Userform kannst du die Aktivierungsreihenfolge bestimmen in der die Userform focusiert wird. Also dann TextBox1 ganz nach oben.

Dann musst du natürlich beim auslösen über den OK Button die Sub etwas umgestalten. Zusätzlich wolltest du ja die ID's in der ListBox1 ausblenden. Dazu gehen wir jetzt nicht mehr über die eingestellten Eigenschaften der Listbox (Column = 2 und die RowSorce = Tabelle.... kannst du löschen). Die setzten wir jetzt beim Initialisieren der Listbox. Das müsste dann etwa wie folgt aussehen.

Ich hoffe, du kommst weiter. Bin jetzt ne Weile in Meetings schau später noch mal rein.

Rolf

Anzeige
Hoffe, ich habe alles richtig gemacht ...
31.05.2002 13:20:55
Susi
Hallo Rolf,

vielen Dank für Deine erneute Hilfe. Ich glaube, ich hab's gepackt. Habe viel gelesen und probiert. Es läuft jetzt es so, wie ich es wollte.

Vielleicht kannst Du ja nochmal über meine Umbauten drüberschauen.

In einer Antwort von Hans habe ich gelesen, daß die Werte für die Listbox auch in einer anderen Datei stehen können. Deswegen so:

Private Sub UserForm_Initialize()
With ListBox1
.ColumnCount = 2
.ColumnHeads = False
.ColumnWidths = "0cm;3cm"
.List = Workbooks("ID-Nummern.xls").Worksheets("IDs").Range("H2:I100").Value
End With
End Sub

Um den in der Liste ausgewählten Klartext in die Textbox zu übernehmen, habe ich geschrieben:

Private Sub ListBox1_Change()
TextBox1.Value = ListBox1.Value
End Sub

Hatte erst mit ListBox1_Click rumprobiert, hat aber den Nachteil, daß die Textbox nicht aktualisiert wird, wenn die automatisch vorhandene Suchfunktion verwendet wird. D.h. ich tippe T ein und die Liste springt zum ersten Eintrag, der mit T beginnt. Mit ListBox1_Change ändert sich aber auch in diesem Fall die Textbox.

Um zu kontrollieren, dass wirklich eine Zahl (mit der korrekten Anzahl Stellen) eingegeben wird, und ob überhaupt etwas eingegeben wurde, habe ich das Klicken auf OK so abgeändert:

Private Sub cmdOK_Click()

If Len(TextBox1.Value) <> 3 Or IsNumeric(TextBox1.Value) = False Then
MsgBox ("Die ID muss eine 3stellige Zahl sein !"), _
48, "Ungültige Eingabe !"
Exit Sub

ElseIf TextBox1 = "" Then
MsgBox ("Sie haben noch keine ID eingegeben !"), _
48, "ID ?"

Else
LiefNr = TextBox1.Value
Unload Me
End If
End Sub

Und damit hatte ich dann den Wert zwar in der MsgBox, aber nicht in meinem Makro!!! Habe dann aber im Archiv gefunden, dass ich ganz an den Anfang des Moduls "Public ID As String" setzen muss.

Schwitz, Stöhn ... (Stunden später) ... Freu

Vielen, vielen Dank, Susi

Anzeige
Trommelwirbel ......
31.05.2002 13:51:47
Rolf Kersjes
Hallo Susi,

Anerkennung in schärfster Form. Dem ist nichts hinzuzufügen. Hast du gut und richtig gemacht.

Nur noch ein kleiner Hinweis: In der Zeile

48, "Ungültige Eingabe !"

kannst du die 48 zur besseren Lesbarkeitkeit auch durch

vbExclamation, "Ungültige Eingabe !"

ersetzen. So kannst du auch verschiedene miteinander kombinieren z.B.

vbOKOnly + vbCritical

Ansonsten noch ein schönes Wochenende.

Rolf

Dann nochmals 1000 Dank (oT)
31.05.2002 16:30:04
Susi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige