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

Userform TextBox mit und ohne ComboBox

Userform TextBox mit und ohne ComboBox
08.09.2022 15:27:49
Matthias
Hallo,
ich habe in einer Userform neben einer Liste von Personen mehrere TextBoxen für Artikel und ComboBoxen für die größen, dazu gibt es jeweils ein Label.
Benannt sind Label, TextBoxen und ComboBoxen immer gleich Art_Name also z.B. bei Kurze Hose - Label_KurzeHose, TextBox_KurzeHose, ComboBox_KurzeHose
In der Textbox wird die Stückzahl eingetragen, diese kann mittels SpinButton erhöht werden, in der ComboBox sind die Größen gelistet.
Bisher hat dieser Code super funktioniert

Dim Ausgang As Worksheet
Dim tbox
Set Ausgang = Worksheets("Ausgang")
For Each tbox In Me.Controls
If left(tbox.Name, 4) = "Text" Then
If (tbox.Text  "" And tbox.Text  0) Then
With Worksheets("Ausgang").Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = TexBo_Datum.Value
.Offset(1, 1).Value = Mid(tbox.Name, 9)
.Offset(1, 2).Value = Me.Controls(Replace(tbox.Name, "Text", "Combo")).Text
.Offset(1, 3).Value = tbox.Text
.Offset(1, 4).Value = ListBox_Fahrer.List(ListBox_Fahrer.ListIndex, 1) & ", " & _
ListBox_Fahrer.List(ListBox_Fahrer.ListIndex, 2)
End With
End If
End If
Next
Nun musste ich Artikel mit einfügen die keine größe haben und dementsprechend auch keine ComboBox zugeordnet haben.
Mit meinen bescheidenen VBA kentnissen wollte ich erweitern mit

Dim Ausgang As Worksheet
Dim tbox
Dim cbox
Set Ausgang = Worksheets("Ausgang")
For Each tbox In Me.Controls
For Each cbox In Me.Controls
If TypeName(tbox) = "TextBox" And TypeName(cbox) = "ComboBox" Then
If tbox.Name = cbox.Name Then
If (tbox.Text  "" And tbox.Text  0) And (cbox.Value >= 0) Then
With Worksheets("Ausgang").Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = TexBo_Datum.Value
.Offset(1, 1).Value = Mid(tbox.Name, 9)
.Offset(1, 2).Value = cbox.Text
.Offset(1, 3).Value = tbox.Text
.Offset(1, 4).Value = ListBox_Fahrer.List(ListBox_Fahrer.ListIndex, 1) & ", " & _
ListBox_Fahrer.List(ListBox_Fahrer.ListIndex, 2)
End With
End If
End If
If cbox.Value >= 0 Then
With Worksheets("Ausgang").Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = TexBo_Datum.Value
.Offset(1, 1).Value = Mid(tbox.Name, 9)
.Offset(1, 3).Value = tbox.Text
.Offset(1, 4).Value = ListBox_Fahrer.List(ListBox_Fahrer.ListIndex, 1) & ", " & _
ListBox_Fahrer.List(ListBox_Fahrer.ListIndex, 2)
End With
End If
End If
Next
Next
Dieser führt aber leider nicht zum Erfolg. Nun wird jeder artikel in jeder möglichen Größe mit dem ausgewählten Namen in die Tabelle eingetragen, Allerdings bleiben Stück und Größe leer wenn nichts eingetragen wurde. Wenn was eingetragen wurde werden Größe und Stückzahl auch übernommen das allerdings 5 mal für die 5 möglichen größen. Erstellt also für jede mögliche Größe eine Zeile.
Bei anderen Versuchen passiert nichts, bekomme allerdings auch keine Debugg meldung.
Hätte auch versucht mittels Dim tbox\cbox As Object die Variable zu definieren, blieb allerdings daran hängen wie ich hier die Typen zuordnen kann. Die Idee dahinter war das ich in einer If abfrage ob es eine ComboBox mit dem gleichen Namen gibt wie eine TextBox.
Vielleicht kann mir hier ja ein Profi helfen das Problem zu lösen. Und so nebenbei wenn ich noch einen Tipp bekomme wie ich eine Textbox machen kann die nur positive Zahlen erlaubt wäre ich nicht undankbar.
Vielen Dank schonmal im Vorraus und Grüße
Matthias
PS: Ich stelle immer viele dumme fragen, aus interesse nicht zwingend aus unvermögen.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
fang fast von vorn an, würde ich..
08.09.2022 16:03:19
vorn
...empfehlen
Hi Matthias,
a) ersetz alle Textboxen, die mit SpinButton in Beziehung stehen, durch Comboboxen.
...wozu die Spielerei mit den SpinButton = +1 oder -1?
...mit Comboboxen kannst du Min- und Maxwert vorgeben UND du musst auch nicht mehr auf Negativwerte kontrollieren !!
Wenn du jetzt mit dem Argument kommst, dass duu doch gar nicht weißt, WIEVIEL Stück gewünscht sind!
Dann kommt von mir: Dann setz doch den MAX-Wert für jede Stückzahl auf 1000 oder sonstiges, was nie jemand eintragen würde. ;-)
b) du kannst natürlich die Labels mit nem eigenen Namen benennen
...musst du aber gar nicht!
...ein Label ist ja nur dazu da, um in einem Userform einem Eingabe- oder Auswahlfeld einen Namen zu geben, damit man halt weiß, an welcher Stelle wird was für ein Wert erwartet
...es kommt auf jeden Fall nur selten vor, dass man im Code ein Label direkt umprogrammieren muss - und nur dann wäre ein eigener lblName hilfreich
...du sparst auf jeden Fall viel Zeit, wenn du nicht mehr die Labels benennst
c) für die neuen Artikel ohne Größe wird es auch kein Problem sein, diese so zu programmieren, dass weiterhin alles funktioniert
...dafür hätte aber zumindest ich gern von dir eine Excel-Bsp-Datei mit ausreichend vielen Bsp-Datenzeilen und natürlich dem Userform (Stckzahl-Textboxen durch Comboboxen ersetzt mit MIN/MAX-Wert) und deinem bisherigen Code
...ohne Datei und nur mit dem bisher gezeigten Code ist es für mich zu anstrengend, mich da einzuarbeiten
Ciao
Thorsten
Anzeige
AW: fang fast von vorn an, würde ich..
08.09.2022 16:47:08
vorn
Hallo Thorsten,
erstmal vielen Dank für deine Rückmeldung.
Ist es für den Code wirklich notwendig die Textboxen durch Combos zu ersetzen? An den Textboxen hängt doch sehr viel für die Benennung der Zellen in den entsprechenden Tabellen. Weiters kann ich ja nicht zwei Comboboxen gleich benennen, da erschliest sich "noch" mir nicht wie man die dann verknüpft.
ComboBoxen sind doch Dropdownlisten, diese muss ich dann ja befüllen, gibt es da eine Formel das alle gleich befüllt werden oder muss dann für jede einzelne mit With und.AddItem gefüllt werden. Über das MIN\MAX hab ich leider auch noch nichts gefunden, habe aber bisher nur offline recherchiert.
Habe die aktuelle Datei mal hier, damit bekommt man evtl auch ein besseres Verständnis. Ist bis auf die Namen unverfälscht.
https://www.herber.de/bbs/user/155061.xlsm
habe nur das automatische öffnen der UserForm1 beim Dateistart deaktiviert.
Die Zeilen die ich beschrieben habe sind bei den Buttons zum Speichern hinterlegt.
Vielen Dank und grüße
Matthias
Anzeige
AW: fang fast von vorn an, würde ich..
09.09.2022 11:08:24
vorn
Hallo,
Ich habe die ComboBoxen nun eingefügt.
Alle sind als Dropdowns mit Listen ausgestattet die nur bestimmte werte zulassen.
https://www.herber.de/bbs/user/155078.xlsm
Anzahl sind alle benannt mit ComboBox1_*
Größe je nach Artikel, alles ausser Hosen ComboBox_*
Hosengrößen ComboBox2_*
Vielen Dank im Vorraus
Matthias
AW: fang fast von vorn an, würde ich..
09.09.2022 12:27:10
vorn
pfff! :-PP
Du drängelst ja! :-)
Hi Matthias,
ja, ich weiß, ich brauchte für meine vorherige Antwort etwas länger.
Aber dafür hab ich auch echt viel gemacht! :-)
Schau dir die andere Antwort erst mal an + gib dazu Feedback.
In deiner neuen Bsp-Datei hab ich bzgl des Befüllens von Comboboxen gesehen, dass du sehr ähnlich wie ich programmiert hast - cool - gut gemacht!
Ab deiner nächsten Antwort (im anderen Beitrags-Ast) sehen wir weiter.
Ciao
Thorsten
Anzeige
AW: fang fast von vorn an, würde ich..
09.09.2022 12:22:30
vorn
so Baby! :-)
jetzt kommt viel (Erklär)text.
Ich hoffe, du verstehst alles
Nein? = noch mal lesen!^^
trotzdem nicht? = ok, stell deine Fragen! :-)
Aber natürlich freu ich mich auch über Feedback von dir, wenn du gleich sofort alles verstanden hast, und wenn sogar deine bisherigen Fragen beantwortet sind.
Hi Matthias,
a) Zitat "Bisher hat dieser Code super funktioniert"
Ja, genau den hab ich auch an die neuen Anforderungen (Gegenstände, wie z Bsp Handschuhe, ohne Angabe einer Größe), erst mal nur für den Button "Speichern und Beenden" so angepasst, dass nun alle Gegenstände korrekt in Tabelle "Ausgang" eingetragen werden
Beachte die Kommentare und natürlich Veränderungen im Code!
Dein eigener Versuch, den Code anzupassen, funktioniert so nicht (wie du ja gemerkt hast) - und Anpassungen wären zu umfangreich
b) Zitat "wie ich eine Textbox machen kann die nur positive Zahlen erlaubt wäre ich nicht undankbar."
b.1) Wie schon von mir erwähnt, würde ich hier Comboboxen bevorzugen, da ich hier feste MIN- und MAX-Werte vorgeben kann und somit gar nicht mehr kontrollieren muss, ob ein Anwender eine negative Zahl verwendet, weil DAS ja nicht mehr möglich ist
Und um DAS zu demonstrieren, hab ich in Userform1 für "Pilot Jacke Navy" und "Regenjacke" sowohl Textboxen als auch DropDown-Button gegen jeweils nur 1 Combobox ausgetauscht - und natürlich entsprechend programmiert
Diese beiden Comboboxen werden, genau so, wie deine anderen Comboboxen für Größen "XS,...usw" und "48,...usw" im UserForm_Initialize-Ereignis befüllt mit den Werten MIN ="" und MAX = 10 (wenn 10 zu wenig, kannst du natürlich anpassen!)
Auf jeden Fall ist jetzt kein/e Eintrag/Auswahl einer negativen Zahl mehr möglich!
Auch hier die Kommentare im Code beachten!
(die Textboxen und DropDown-Button für "Pilot Jacke Navy" und "Regenjacke" hab ich nicht gelöscht, sondern nur nach unten, zwischen die beiden Speichern-Button verschoben; wenn du also Textboxen/DropDowns behalten willst, könntest du also meine 2 neuen Comboboxen löschen und die "alten" Textboxen + DropDown's markieren + zurückschieben)
VORTEIL: eine extra programmierte Kontrolle ist nicht erforderlich
NACHTEIL: mir ist noch nix bekannt :-)
b.2) Falls dich DAS noch immer nicht überzeugt, und du trotzdem die Textboxen/DropDown-Button behalten willst, hab ich für die nächsten 2 Gegenstände "Jacke Grau" und "Softshell Schwarz" das Ganze MIT den Textboxen/DropDown's dann auch so programmiert, dass Negativzahlen nicht mehr möglich sind.
Dafür wird im Code nur überprüft, dass bei Klick auf SpinDown der Zahlenwert in der Textbox NUR DANN um 1 verringert wird, SOLANGE der Zahlenwert nicht 0 oder kleiner 0 ist.
Auch dazu beachte den Code in den SpinDown-Ereignissen für die 2 genannten Gegenstände.
VORTEIL: ich sehe hier noch keinen
NACHTEIL: pro Textbox, bzw für jeden Klick auf SpinUp/Down sind DREI Codezeilen erforderlich!
Wenn du also weiterhin 13 Textboxen verwenden willst, sind extra deswegen 13 * 3 * 2 (Up + Down) = 78 !! zusätzliche Codezeilen erforderlich, die du bei Verwendung von Comboboxen (siehe b.1) sparen würdest
c) Zitat "Ist es für den Code wirklich notwendig die Textboxen durch Combos zu ersetzen?"
Ja, ich erkenn dein "Problem", dass du dann so einiges im Code anpassen müsstest.
Aber verglichen mit den Vor- und Nachteilen aus Kapitel b) würde zumindest ich diese Code-korrektur-Arbeit auf mich nehmen; allein schon deswegen, weil ich 78!! Codezeilen sparen würde und diese somit auch keine Fehler mehr verursachen könnten, die ich jetzt noch gar nicht kenne :-)
d) Zitat "Weiters kann ich ja nicht zwei Comboboxen gleich benennen"
Stimmt! Und DAS sollst du ja auch nicht.
Bei der Namensvergabe für Controls aller Art sind deiner Fantasie doch fast keine Grenzen gesetzt.
meine 2 Comboboxen hab ich diese Namen gegeben:
Combobox für Pilot Jacke Navy = cmbJN_Anzahl (JN steht für Jacke Navy, da ich zu faul bin :-) )
Combobox für Regenjacke = cmbRJ_Anzahl (RJ steht für Regenjacke, da ich immer noch zu faul bin :-) )
Und der Zusatz _Anzahl verschafft mir doch auch noch nach Wochen/Monaten sofort einen Überblick, welche Eingaben, bzw Auswahl hier erwartet wird.
Oder was meinst du dazu?
e) Zitat "ComboBoxen sind doch Dropdownlisten, diese muss ich dann ja befüllen, gibt es da eine Formel das alle gleich befüllt werden oder muss dann für jede einzelne mit With und.AddItem gefüllt werden."
Nee, ne Formel wird normalerweise nur in die Excelzellen eingetragen.
Aber es gibt mit Code die Möglichkeit, das Ganze so zu programmieren, dass - wie du hoffst - alle gleich befüllt werden, ohne - wie du befürchtest - für jeden einzelnen Eintrag AddItem geschrieben werden muss
Im UserForm_Initialize-Ereignis von Userform1 erkennst du sehr, sehr gut, wie man so etwas programmieren kann.
f) nix Zitat, aber Programmabbruch mit Fehlermeldung nach Klick auf den Button "Speichern und Beenden"
Im Code für diesen Button wird versucht, fast alle Tabellenblätter auszublenden (Visible = False).
Das funktioniert in deiner Bsp-Datei aber nicht, weil du den Arbeitsmappenschutz MIT Passwort aktiviert hast.
Ich kenn das PW natürlich nicht und hab auch keine Lust es zu "hacken".
Aber so weiß ich natürlich auch nicht, ob denn der nachfolgende Code für den Button fehlerfrei ausgeführt wird.
So, hier noch deine, von mir geänderte Bsp-Datei zurück:
https://www.herber.de/bbs/user/155083.xlsm
Hinweis für alle Änderungen von mir!
- ich hab Comboboxen anstelle von Textboxen für nur zwei Gegenstände hinzugefügt + entsprechend programmiert, um dir zu zeigen, wie es gehen könnte
Wenn du diese Variante übernehmen willst, musst du die anderen Textboxen gegen Comboboxen tauschen und den VBA-Code entsprechend erweitern (das Löschen der DropDown's nicht vergessen!)
- nur für zwei weitere Gegenstände hab ich die Textboxen/DropDowns so programmiert, dass Eingabe/Auswahl von negativen Zahlen nicht mehr möglich ist, um dir auch hier zu demonstrieren, wie das geht
Wenn du diese Variante übernehmen willst, musst du alle übrigen DropDown's entsprechend programmieren.
Nun denn, DAS war's erst mal von mir :-)
Konnte ich denn helfen?
Ciao
Thorsten
Anzeige
AW: fang fast von vorn an, würde ich..
09.09.2022 13:35:45
vorn
Hallo Thorsten,
auf jeden Fall mal vielen Dank.
Alles sofort verstanden = nein
Momentan kreisen sehr viele Fragen in meinem Kopf herum. Werde mir das ganze aber mehrmals durchlesen und auch den Code noch öfter anschauen müssen um alles zu verstehen.
Wie du schon gesehen hast, war ich nicht untätig und musste dann feststellen dass das bisherige deutlich optimiert werden kann. Denke ich werde übers Wochenende versuchen deine Lösung, für die ich wirklich sehr dankbar bin, mit der von mir ausgearbeiteten neuen Version zu Kombinieren.
Ich hoffe dadurch dann auch einiges an Verständnis zu gewinnen.
Vielleicht verstehe ich dann auch irgendwann die korrekte Verwendung der Case funktion :)
Wusste ja das ich bei den Speicherbuttons eine "Wenn, dann" ähnliche Lösung brauche. Keine meiner Ideen war auch nur annähernd an der Lösung....
Auf jeden Fall gibt es nochmal ein feedback von mir. Das mit dem Passwort tut mir leid, den hab ich auf die schnelle wohl ungewollt gesetzt. In der "Originalen" ist nur das Blatt Lagerstand geschützt, weil der Rest ausgeblendet wird.
Herzlichen Dank
Matthias
Anzeige
AW: fang fast von vorn an, würde ich..
12.09.2022 10:40:26
vorn
Hallo Thorsten,
ich habe mich intensiv mit der Datei beschäftigt. Denke das meiste ist mir auch klar.
Ich habe es nochmal versucht, allerdings bekomme ich das mit dem Speichern nicht hin. Habe zig Varianten versucht und nie das richtige Ergebnis bekommen. Entweder bekomme ich statt dr Anzahl die Größe, statt der größe die Anzahl oder er schreibt für jeden Artikel eine Zeile etc... lauter Fehlversuche.
Anscheinend fehlt mir das Verständnis wie ich die ComboBoxen ordentlich trenne.
Müsste ja wenn im Namen Box1_ ist die Anzahl auslesen und dann die zugehörigen Größen aus Box_ und Box2_. Habe die umgebaute Datei mit deutlich verkürztem Code nochmal hochgeladen.
https://www.herber.de/bbs/user/155114.xlsm
Vielleicht kannst du mir ja dafür noch eine Lösung bieten, in der ich nicht alle Comboboxen umbennen muss.
Ansonsten wäre ich dankbar wenn mir sagen kannst ob dieser Ansatz zum Erfolg führen könnte, wenn ich den Boxen andere Namen gebe:

For Each cbox In Me.Controls
Case InStr(cbox.Name, "Anzahl")  0
With Worksheets("Ausgang").Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = TexBo_Datum.Value
.Offset(1, 1).Value = Mid(cbox.Name, InStr(cbox.Name, "_") + 1)
Select Case True
Case InStr(LCase(cbox.Name), "muetze") = 0 Or _
InStr(LCase(cbox.Name), "hand") = 0 Or _
InStr(LCase(cbox.Name), "sack") = 0
.Offset(1, 2).Value = Me.Controls(InStr(cbox.Name, "Text", "Combo")).Text
End Select
.Offset(1, 3).Value = cbox.Text
.Offset(1, 4).Value = ListBox_Fahrer.List(ListBox_Fahrer.ListIndex, 1) & ", " & _
ListBox_Fahrer.List(ListBox_Fahrer.ListIndex, 2)
End With
Vielen Dank wieder im vorraus
Sg Matthias
Anzeige
AW: fang fast von vorn an, würde ich..
15.09.2022 16:55:44
vorn
Hi Matthias,
es gibtn Grund, wieso ich noch nicht geantwortet habe.
Klar, deine neue Frage mit der neuen Bsp-Datei (danke dafür!) könnt ich wohl beantworten.
Aber insgesamt ist dein eigener Code ziemlich durcheinander, so dass ich noch nicht genau weiß, wie/wo/was ich noch anpassen oder so lassen könnte.
Und jetzt ist dein Beitrag schon im Archiv verschwunden.
Wenn du magst, erstell bitte einen neuen Beitrag mit Archiv-Link-Verweis auf diesen Beitrag hier
https://www.herber.de/forum/archiv/1896to1900/1897833_Userform_TextBox_mit_und_ohne_ComboBox.html
(von https...bis...html alles markieren, kopieren + im neuen Beitrag einfügen)
Hier nicht mehr antworten, da auch diese Möglichkeit bald weg ist.
Ciao
Thorsten
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige