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

Text aus ComboBox mitspeichern

Text aus ComboBox mitspeichern
12.02.2021 11:36:30
Matthias
Hallo zusammen,
komme leider mal wieder nicht weiter.
Ich möchte beim Speichern das aus UserForm3, MultiPage2 page 2 die Größen aus den ComboBoxen mit gespeichert werden.
Nach 2 Tagen recherche finde ich allerdings kein probates Mittel dass mir das in dem bestehenden und funktionierendem Code erledigt.
Unten zitiertes konnte ich schon ein paar mal für andere Zwecke erfolgreich umschreiben. Und bin mir auch ziemlich sicher das die Werte aus den jeweiligen ComboBoxen nicht all zu schwer mit einzufügen sind.
Die ComboBox in der die Größe ausgewählt werden kann hat immer die gleiche Nachlaufbezeichnung wie die TextBox. Nur brauch ich da eben den Inhalt, bzw Text.
Ist mein letzter Versuch gewesen. Ich komm einfach nicht dahinter wie ich das lösen kann.

Private Sub Button_SaveGoAhead_Click()
Dim Eingang As Worksheet
Dim Ctrl
Dim cCtrl
Dim Name
Dim Com
Const sk = ";"
Set Eingang = Worksheets("Eingang")
For Each Ctrl In Me.Controls
For Each Name In Array("TextBox_;")
For Each cCtrl In Me.Controls
If InStr(1, Ctrl.Name, Split(Name, sk)(0), vbTextCompare) > 0 Then
If (Ctrl.Text  "" And Ctrl.Text  0) Then
With Eingang.Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = TextBo_Datum.Value
.Offset(1, 1).Value = Replace(Ctrl.Name, Split(Name, sk)(0), Split(Name, sk) _
(1))
.Offset(1, 2).Value = cCtrl.Text
.Offset(1, 3).Value = Ctrl.Text
.Offset(1, 4).Value = ListBox_Driver.Value
End With
End If
End If
Next
Next
Next
ThisWorkbook.Save
ThisWorkbook.RefreshAll
Dim tb As Object
Dim cb As Object
For Each tb In UserForm3.Controls
If TypeName(tb) = "TextBox" Then
tb.Text = ""
End If
Next
For Each cb In UserForm3.Controls
If TypeName(cb) = "ComboBox" Then
cb.Text = ""
End If
Next
Me.TextBo_Datum.Value = Format(Now, "dd.mm.yyyy")
ThisWorkbook.Save
ThisWorkbook.RefreshAll
End Sub

Hoffe Ihr habt mal wieder einen Super Tipp oder eine Lösung für mich.
Grüße Matthias
hier noch die Beispielmappe:
https://www.herber.de/bbs/user/143848.xlsm
PS: Bevor geschimpft wird, es sind bereits 2 Bücher auf dem Weg zu mir damit ich nicht die Wahrscheinlich einfachsten Fragen hier stellen muss. :)

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Text aus ComboBox mitspeichern
12.02.2021 14:22:43
Matthias
s
AW: Text aus ComboBox mitspeichern
12.02.2021 15:55:54
Matthias
Hallo,
ich präzisiere um welchen Teil es geht
Dim Eingang As Worksheet
Dim Ctrl
Dim cCtrl
Dim Name
Dim Com
Const sk = ";"
Set Eingang = Worksheets("Eingang")
For Each Ctrl In Me.Controls
For Each Name In Array("TextBox_;")
 For Each cCtrl In Me.Controls
If InStr(1, Ctrl.Name, Split(Name, sk)(0), vbTextCompare) > 0 Then
If (Ctrl.Text  "" And Ctrl.Text  0) Then
With Eingang.Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = TextBo_Datum.Value
.Offset(1, 1).Value = Replace(Ctrl.Name, Split(Name, sk)(0), Split(Name, sk) _
_
(1))
 .Offset(1, 2).Value = cCtrl.Text
.Offset(1, 3).Value = Ctrl.Text
.Offset(1, 4).Value = ListBox_Driver.Value
End With
End If
End If
Next
Next
Next
Das Fett gedruckte habe ich hinzugefügt. Und ich weiß das ich cCtrl noch zuweisen muss was es ist. Und hier ist das Problem. Ich weiß A)nicht wo die entsprechende Zeile sein muss und B)nicht genau wie geschrieben
Hab schon einiges durchprobiert, allerdings führte nichts zum Erfolg.
Sg Matthias
Anzeige
AW: Text aus ComboBox mitspeichern
12.02.2021 16:11:40
Yal
Hallo Matthias,
cCtrl ist die Variable.
Me.Controls ist eine Auflistung von ein oder mehrere Elemente.
Die For Each nimmt jede Element der Auflistung und weise diese einzel zu cCtrl.
Also cCtrl ist einmal TextBox1, einmal ComboBox1, einmal TextBox2, usw.
(es ist nicht fest-typisiert. Alles ist "object")
Array("TextBox_;") ist eine Liste mit ein einzige Element. Ein For Each darauf läuft nur einmal. Daher ist eine For-Schleife hier nutzlos.
Lass den Code in Schritt Modus laufen (F8). Oder setzt einen Breakpoint (F9) und starte ganz normal bis dahin, dann Schritt für Schritt.
Öffne dabei das Lokal-Fenster (Ansicht, Lokal-Fenster), um die Stände der Variablen zu sehen.
Viel Erfolg
Yal
Anzeige
AW: Text aus ComboBox mitspeichern
12.02.2021 19:38:33
Matthias
Hallo Yal,
Vielen Dank für die Erklärung.
Jetzt hab ich das glaube noch besser begriffen. In dem Fall kann ich aus jedem Ctrl, also jedem Objekt, herauspicken was ich benötige.
Ich hatte das bis jetzt so verstanden das ich dem Ctrl oder cCtrl ein Array zuweisen muss.
Sg Matthias
AW: Text aus ComboBox mitspeichern
12.02.2021 14:30:17
Yal
Hallo Matthias,
ich verstehe nicht ganz, wie der Code zusammen mit der Frage hängt?
Übrigens:
For Each tb In UserForm3.Controls
If TypeName(tb) = "TextBox" Then
tb.Text = ""
End If
Next
For Each cb In UserForm3.Controls
If TypeName(cb) = "ComboBox" Then
cb.Text = ""
End If
Next
lässt sich wie folgt "optimieren":
For Each tb In UserForm3.Controls
Select Case TypeName(tb)
Case "TextBox", "ComboBox"
tb.Text = ""
End Select
Next
Vermeide auch 2mal "Workbook.Save" nacheinander zu verwenden. Soviel Paranoia ist bei modernen Computer nicht mehr notwendig.
VG
Yal
Anzeige
AW: Text aus ComboBox mitspeichern
12.02.2021 15:07:50
Matthias
Hallo Yal,
erstmal Danke für die Antwort und den Tipp mit dem zusammenfassen. Einmal Save wurde auch direkt entfernt.
Zur Ursprünglichen Frage,
Mit dem was ich schon habe bekomme ich derzeit die Werte und Bezeichnungen die ich in der Tabelle speichern möchte in Spalte A, B, D und E.
Also Datum in Spalte A
Artikel in Spalte B
Stückzahl in Spalte D
und Name in Spalte E
Die Größe (Text oder Value) aus der jeweilig zugehörigen ComboBox sollte noch in Spalte C.
Es hat damit zu tun das der ja eigentlich für die meisten Fälle prima funktioniert und ich den nur um das entsprechende erweitern wollte.
Eigentlich dachte ich ich könnte es einfach damit erweitern.
.Offset(1, 2).Value = "ComboBox_" & Split(Name, sk)(1).Value

bzw
.Offset(1, 2).Value = CStr("ComboBox_" & Split(Name, sk)(1)).Value

So einfach gehts dann aber wohl doch nicht :(
SG
Matthias
Anzeige
AW: Text aus ComboBox mitspeichern
12.02.2021 16:12:41
Yal

.Offset(1, 2).Value = TypeName(Ctrl.Value)

AW: Text aus ComboBox mitspeichern
12.02.2021 19:41:49
Matthias
Hallo Yal, nochmal.
Ich wusste doch das es einfach ist.
Werde dann wohl doch noch auf die Bücher warten und ordentlich durchlesen bevor ich weiter mache.
Viel Dank für deine Hilfe
SG
Matthias
AW: Text aus ComboBox mitspeichern
12.02.2021 23:46:11
Yal
Jein. Nicht warten: googeln.
Nur: die richtige Antwort bekommt man mit der richtigen Frage. Das ist der Kunst: wonach muss ich googeln?
Ich hätte zuerst "VBA prüfen text" probiert (ersteer Treffer: Herbers Forum)
was übrigens dazu führt, dass ich korrigieren muss, weil
TypeName("123") ergibt String!
Du musst IsNumeric (Ctrl.Value) verwenden.
VG
Yal
Anzeige
AW: Text aus ComboBox mitspeichern
15.02.2021 09:37:37
Matthias
Hallo,
Das ist richtig, und den Thread hatte ich sogar gefunden. Ob ich das ausprobiert habe bei den tausend versuchen weiß ich jetzt nicht mehr.
Allerdings musste ich jetzt auch feststellen das diese Lösung so nicht geht.
Bei TypeName(Ctrl.Value) wird die Zelle mit "String" gefüllt
Bei IsNumeric(Ctrl.Value) mit "Wahr"
Bei Ctrl.Value ist = Ctrl.Text. Wenn ich das richtig verstanden habe ist Ctrl immer die TextBox, durch die If abfrage.
Leider bin ich weiter auf der Suche wie ich in dem bestehenden Code eine Bezeichnung für die ComboBoxen einfügen kann um deren Inhalte zu speichern.
Ich versuche auch die Frage bzw. mein Problem nochmal präziser zu formulieren.
Es sollten die Daten aus TextBox_Datum, Name des Artikels, Größe, Stückzahl und der zugehörige Name in einer Zeile abgespeichert werden. Werden mehrere Artikel die Ausgegeben sollen dies untereinander aufgelistet werden.
Mit folgendem Code funktioniert das weitestgehend. Bis auf die Größe aus der ComboBox. Je Artikel habe ich eine TextBox für die Stückzahl und eine ComboBox für die Größe.
Dim Eingang As Worksheet
Dim Ctrl
Dim Name
Const sk = ";"
Set Eingang = Worksheets("Eingang")
For Each Ctrl In Me.Controls
For Each Name In Array("TextBox_;")
If InStr(1, Ctrl.Name, Split(Name, sk)(0), vbTextCompare) > 0 Then
If (Ctrl.Text  "" And Ctrl.Text  0) Then
With Eingang.Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = TextBo_Datum.Value
.Offset(1, 1).Value = Replace(Ctrl.Name, Split(Name, sk)(0), Split(Name, sk) _
(1))
.Offset(1, 2).Value = Ctrl.Value
.Offset(1, 3).Value = Ctrl.Text
.Offset(1, 4).Value = ListBox_Driver.Value
End With
End If
End If
Next
Next
Vielen Dank nochmal für die bisherige Hilfe.
Sg Matthias
Anzeige
AW: Text aus ComboBox mitspeichern
15.02.2021 12:53:29
Matthias
So, habs hinbekommen. Nicht sehr elegant aber es funtkioniert.
Wenn noch jemand einen Tipp hat wie es eleganter machbar ist, bin ich gerne offen dafür.
Dim Eingang As Worksheet
Dim Ctrl
Dim Name
Const sk = ";"
Set Eingang = Worksheets("Eingang")
For Each Ctrl In Me.Controls
For Each Name In Array("TextBox_;")
If InStr(1, Ctrl.Name, Split(Name, sk)(0), vbTextCompare) > 0 Then
If (Ctrl.Text  "" And Ctrl.Text  0) Then
With Eingang.Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = TextBo_Datum.Value
.Offset(1, 1).Value = Replace(Ctrl.Name, Split(Name, sk)(0), Split(Name, sk) _
(1))
.Offset(1, 2).Value = Me.Controls("ComboBox_" & Replace(Ctrl.Name, Split( _
Name, sk)(0), Split(Name, sk)(1))).Text
.Offset(1, 3).Value = Ctrl.Text
.Offset(1, 4).Value = ListBox_Driver.Value
End With
End If
End If
Next
Next
Sg Matthias
Anzeige
AW: Text aus ComboBox mitspeichern
15.02.2021 19:33:39
Yal
Hallo Matthias,
sollte ungefähr dasselbe auswirken:
Sub Test()
Dim Ctrl
' Gehe alle controls durch
' Wenn "TextBox_abc" tue was und
' Hole den Wert von ComboBox_abc
For Each Ctrl In Me.Controls
If Left(Ctrl.Name, 4) = "Text" Then
If (Ctrl.Text  "" And Ctrl.Text  0) Then
With Worksheets("Eingang").Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = TextBo_Datum.Value
.Offset(1, 1).Value = Mid(Ctrl.Name, 9)
.Offset(1, 2).Value = Me.Controls(Replace(Ctrl.Name, "Text", "Combo")).Text
.Offset(1, 3).Value = Ctrl.Text
.Offset(1, 4).Value = ListBox_Driver.Value
End With
End If
End If
Next
End Sub
Ob es eleganter ist, ist geschmacksache. Leichter zu verstehen, ist es in 2 Monaten mit Sicherheit.
(Verständlichkeit des Codings durch anderen oder durch selbst nach "ein paar Wochen" ist eine Messlate des Codingsqualität).
VG
Yal
Anzeige
AW: Text aus ComboBox mitspeichern
15.02.2021 21:49:29
Matthias
Hallo Yal,
sieht auf jeden Fall nach weniger Schreiben aus. :)
Werde ich morgen auch mal direkt mal testen.
Darf man da noch fragen ob es auch noch eine möglichkeit gibt das zugehörige Label abzufragen?
Also statt Mid direkt die Bezeichnung vom Label zu nehmen?
Und wenn ich das richtig verstanden habe ist Ctrl doch sowohl TextBox als auch ComboBox. Warum bleibt das bei TextBox in der Schleife hängen. Das geht mir gerade noch nicht in den Schädel.
Ich bedanke mich für die großartige Hilfe die ich erhalten habe.
Grüße Matthias
AW: Text aus ComboBox mitspeichern
16.02.2021 11:26:28
Yal
.Offset(1,x).Value = Ctrl.Caption
Anzeige
AW: Text aus ComboBox mitspeichern
15.02.2021 19:47:35
Daniel
Hi
das Speichern von ausgewählten Inhalten in einer Form geht eigentlich ganz einfach und ohne jeglichen Code.
gibt für jedes Steuerelement, dessen aktueller Inhalt gespeichert und beim nächsten Öffnen wiederverwendet werden soll, in der Eigenschaft ControlSource die Adresse einer freien Zelle an:
ControlSource: 'Tabelle1'!A1
der Wert des Steuerelements wird dann immer automatisch in diese Zelle geschrieben bzw beim Laden der Userform aus dieser Zelle ausgelesen.
Der Inhalt der Zelle wird beim Speichern der Datei natürlich mit gespeichert.
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige