Excel VBA Formular - Mehrere Checkboxeinträge in eine Zelle überführen

Dabei seit
Okt. 2018
Beiträge
2
#1
Hallo zusammen,

ich bin Neuling in der VBA-Welt und muss für eine Messe ein Messelead-Formular erzeugen. Bis jetzt hat alles soweit super funktioniert, aber mit einer Sache komme ich einfach nicht weiter, und das nach drei Tagen Internetrecherche. Ich hoffe, ihr könnt mir helfen.

Es geht darum, dass wir ca. 30 Broschüren haben und es sollen von 0-alle ausgewählt werden können im VBA Formular und diese pro Datensatz in EINE Zelle nacheinander (nicht untereinander) mit Semikolon oder Kommata abgetrennt werden.

Es gibt folgende Broschüren bei uns, wie schaffe ich es, dass abgefragt wird, welche der Broschüren angehakt ist und wenn sie angehakt sind, dass sie alle in einer Zelle landen?

Ich habe es schon mit so etwas probiert, aber das hat nicht funktioniert:

If cbMotion.Value = True Then
ActiveSheet.Cells(intErsteLeereZeile, 17).Value = cbMotion.Caption & + "& cbPasotec + "&cbPremium + "&cbDynamic + "&cbCompact + "&cbEC + "&cbEinkabellösung
End If

Vielleicht könnt ihr es mir nur mit den ersten sieben Broschüren erklären?

"Imagebroschüre - Heidrive Motion" (cbMotion)
"Imagebroschüre - Pasotec" (cbPasotec)
"Servomotoren - Katalog HeiMotion Premium" (cbPremium)
"Servomotoren - Katalog HeiMotion Dynamic" (cbDynamic)
"Servomotoren - Katalog HeiMotion Compact" (cbCompact)
"Servomotoren - Katalog EC-/BLDC Motoren" (cbEC)
"Servomotoren - Flyer DSL - Einkabellösung" (cbEinkabellösung)
"Servomotoren - Flyer HMD04"
"Servomotoren - Flyer HMD10"
"Asynchronmotoren - Katalog Motorenprogramm"
"Motoren mit integrierter Elektronik - Prospekt HeiMotion integriert"
"Motoren mit integrierter Elektronik - Flyer EC-Compact"
"Motoren mit integrierter Elektronik - Flyer HMPi04"
"Motoren mit integrierter Elektronik - Flyer Servotechnologie Robotik"
"Elektronik - Katalog Reglerprogramm"
"Elektronik - Flyer HES/HEM Geber"
"Elektronik - Flyer SIL Geber"
"Elektronik - Flyer HCD"
"Getriebemotoren - Katalog Planetengetriebe (HMPG)"
"Getriebemotoren - Katalog Planetengetriebe (HMDG)"
"Getriebemotoren - Katalog Stirnkegelrad-/Schneckengetriebe"
"Getriebemotoren - Katalog Stirnradgetriebe"
"Getriebemotoren - Prospekt Flachgetriebe"
"Getriebemotoren - Flyer Getriebemotoren Compact"
"Getriebemotoren - Flyer AGVs"
"Heizungsbau - Asychron"
"Heizungsbau - Servo"

So soll das Ganze dann im VBA Formular aussehen: Excel VBA Mehrfachauswahl.png
Excel VBA Mehrfachauswahl.png


Liebsten Dank für eure Hilfe!
 

mac4life

Lt. Commander
Dabei seit
Dez. 2013
Beiträge
1.225
#2
Ich würde das mit einem String machen und dann am Schluss in die Zelle schreiben.

Dim Temp as String

If cbMotion.Value = True Then Temp = Temp & cbMotion.Name & "; "
If cbPasotec.Value = True Then Temp = Temp & cbPasotec.Name & "; "
If cbPremium.Value = True Then Temp = Temp & cbPremium.Name & "; "
If cbDynamic.Value = True Then Temp = Temp & cbDynamic.Name & "; "
usw.

ActiveSheet.Cells(intErsteLeereZeile, 17).Value = Temp

Oder so ähnlich.
Hab jetzt kein Windows PC mit Excel hier, daher kann ich es nicht testen, ob ich ein Fehler gemacht habe.
 
Dabei seit
Dez. 2012
Beiträge
3.871
#3
Du kannst alle Kontrollkästchen/Checkboxen in einer Schleife durchlaufen, und wenn das Häkchen gesetzt ist, speicherst du den Namen in einer Variablen bzw. fügst ihn an eine bestehende Variable hinzu.

Code:
Dim sAuswahl as String

sAuswahl = ""

For Each box In Me.Controls 'Alle Kontrollfelder durchlaufen
  If TypeName(box) = "CheckBox" Then 'Prüfen ob das Kontrollfeld eine Checkbox ist

    If box.Value = True Then 'Prüfen ob die Box ausgewählt ist
      If sAuswahl = "" Then 'Prüfen ob schon etwas in sAuswahl steht
        sAuswahl = box.Name 'wenn sAuswahl noch leer ist nur den Checkbox-Namen einfügen
      Else
        sAuswahl = sAuswahl & ", " & box.Name  'wenn sAuswahl nicht mehr leer den Checkbox-Namen mit , hinten anfügen
      End If
    End If

  End If

ActiveSheet.Cells(intErsteLeereZeile, 17).Value = sAuswahl

Next box
Damit ist auch egal, ob du 1 oder 500 Checkboxen hast.

Wenn du noch andere Checkboxen in deiner UserForm hast, die nicht beachtet werden sollen, dann ist es am einfachsten, wenn du bei diesen bspw. noch ign (ignorieren) vor den Namen setzt (ignCheckboxA, ignCheckboxB).
In der Schleife müsste du dann prüfen, ob die ersten drei Buchstaben in Namen nicht ign sind (If TypeName(box) = "CheckBox" and left(box.Name, 3) <> "ign" Then ...
 
Zuletzt bearbeitet:
Top