Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

dynamische Userform- Klassenmodul Event

Forumthread: dynamische Userform- Klassenmodul Event

dynamische Userform- Klassenmodul Event
22.10.2013 09:13:27
novo
Hallo zusammen,
ich habe Vorgestern meine erste dynamische Userform erstellt.
Diese soll, sobald man auf das "+" ganz links klickt, eine weitere Reihe gleicher
Steuerelemente erzeugen.
(In der angehängten Datei sieht man, aus welchen Steuerelementen diese besteht)
Wird in der ersten Combobox "Optiken" ausgewählt, soll in der darauf folgenden andere Items angezeigt werden, als wenn "Projektoren" ausgewählt wurde.
Soweit kein Problem. Da die erste Reihe schon wärhend der Entwicklerzeit besteht, konnte ich oben beschriebenes einfach im Change_Event der erste Combobox programmieren.
Nun ist folgendes Problem aufgetreten:
Da das nun auch für alle Comboboxen gelten soll, die während der Laufzeit durch betätigen des "+" Buttons erzeugt wurden,
habe ich für diese ein Klassenmodul erzeugt, das die Change_Events abfängt.
Wenn ich jetzt das Change_Event bei einer der ersten Comboboxen auslöse,
weiß das Programm natürlich nicht auf welche zweite Combobox sich die Itemsänderung bezieht.
Mein Problem liegt also darin auszulesen von welcher Combobox das Change_event ausgelöst wurde und dann zu sagen: Dann ändere die Itemliste bei der Combobox zu deiner linken.
Ich weiß echt nicht mehr weiter. Habe schon viel probiert aber nichts klappt.
Es ist auch nicht möglich eine der zweiten Comboboxen im Klassenmodul direkt über ihren Namen anzuwählen. Glaube das liegt daran, dass diese halt erst zur Laufzeit erzeugt wurden.
Vielen Dank schonmal im voraus für eure Hilfe.
Beste Grüße
novo
Userbild

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: dynamische Userform- Klassenmodul Event
22.10.2013 09:20:56
Beverly
Hi,
deine ComboBoxen haben doch Namen (oder fortlaufende Nummern) - somit dürfte es doch nicht schwer sein festzustellen, welche Reihe geändert wurde.
Allerdings kenne ich deine Mappe und auch den Code nicht, sodass es schwierig ist, etwas genaues dazu zu sagen.


Anzeige
AW: dynamische Userform- Klassenmodul Event
22.10.2013 09:38:36
novo
Da hast du Recht.
Festzustellen, welche Combobox geändert wurde ich nicht das Problem.
Das Problem ist, die entsprechende Combobox rechts daneben anzuwählen.
Die Namen die beim drücken des "+" Buttons mithilfe eines fortlaufenden Index vergeben werden,
sind aus dem Klassenmodul heraus nicht direkt anwählbar.
Es erscheint die Fehlermeldung: " Objekt erforderlich"
Public Sub cbaddrow_Click()
Me.cbaddrow.Top = Me.cbaddrow.Top + 30
Set newcbprodukttyp = ufartikelauswahl.Controls.Add("Forms.Combobox.1")
With newcbprodukttyp
.Name = "cbprodukttyp" & i
.Left = cbprodukttyp.Left
.Top = cbprodukttyp.Top * i
.Height = cbprodukttyp.Height
.Width = cbprodukttyp.Width
.AddItem ("Projektoren")
.AddItem ("Optiken")
.Value = "Projektoren"
End With
Set bCommands(i).change = newcbprodukttyp
Set newcbartikelbezeichnung = ufartikelauswahl.Controls.Add("Forms.Combobox.1")
With newcbartikelbezeichnung
.Name = "cbartikelbezeichnung" & i
.Left = cbartikelbezeichnung.Left
.Top = cbartikelbezeichnung.Top * i
.Height = cbartikelbezeichnung.Height
.Width = cbartikelbezeichnung.Width
End With
Set newobframeundcase = ufartikelauswahl.Controls.Add("Forms.Optionbutton.1")
With newobframeundcase
.GroupName = i
.Name = "obframeundcase" & i
.Caption = " Frame und Case"
.Left = obframeundcase.Left
.Top = obframeundcase.Top * i
.Width = obframeundcase.Width
.Height = obframeundcase.Height
End With
Set newobkarton = ufartikelauswahl.Controls.Add("Forms.Optionbutton.1")
With newobkarton
.GroupName = i
.Name = "obkarton" & i
.Caption = "Karton"
.Left = obkarton.Left
.Top = obkarton.Top * i
.Width = obkarton.Width
.Height = obkarton.Height
End With
Set newtbanzahl = ufartikelauswahl.Controls.Add("forms.textbox.1")
With newtbanzahl
.Name = "tbanzahl" & i
.Left = tbanzahl.Left
.Top = tbanzahl.Top * i
.Width = tbanzahl.Width
.Height = tbanzahl.Height
End With
Set newcblangserviced = ufartikelauswahl.Controls.Add("forms.checkbox.1")
With newcblangserviced
.Name = "cblangserviced" & i
.Caption = "Lang Serviced"
.Left = cblangserviced.Left
.Top = cblangserviced.Top * i
.Height = cblangserviced.Height
.Width = cblangserviced.Width
End With
Set aCommands(i).click = newcblangserviced
Set newtbpreis = ufartikelauswahl.Controls.Add("forms.textbox.1")
With newtbpreis
.Name = "tbpreis" & i
.Left = tbpreis.Left
.Top = tbpreis.Top * i
.Width = tbpreis.Width
.Height = tbpreis.Height
End With
ufartikelauswahl.Height = ufartikelauswahl.Height + 30
i = i + 1
End Sub

Anzeige
AW: dynamische Userform- Klassenmodul Event
22.10.2013 09:43:11
novo
Hier das Klassenmodul.
Als Test wollte ich einfach mal die zweite Combobox in der zweiten Reihen anwählen und Items hinzufügen.
Er kennt den Namen aber wohl nicht.
Public WithEvents change As MSForms.ComboBox
Public Sub change_change()
If change = " Projektoren" Then
With cbartikelbezeichnung2
.AddItem = ("abc")
End With
Else
With cbartikelbezeichnung2
.AddItem = ("def")
End With
End If
End Sub

Anzeige
AW: dynamische Userform- Klassenmodul Event
22.10.2013 10:27:52
Beverly
Ich soll also deine Arbeitsmappe nachbauen? Dann bin ich hier raus.


AW: dynamische Userform- Klassenmodul Event
22.10.2013 10:54:03
novo
Nein :) Sorry
Dachte der Programmauschnitt reicht, damit das Problem deutlicher wird.
Lade jetzt die ganze Mappe hoch.
https://www.herber.de/bbs/user/87741.xlsm

Anzeige
AW: dynamische Userform- Klassenmodul Event
22.10.2013 11:14:59
Beverly
Das sollte der Code im Klassenmodul clschange sein:
Public Sub change_change()
Dim arrDaten1
Dim arrDaten2
Dim strNummer As String
arrDaten1 = Array("ABCD", "BCDE")
arrDaten2 = Array("oooo", "pppp")
strNummer = Application.Substitute(change.Name, "cbprodukttyp", "")
With ufartikelauswahl.Controls("cbartikelbezeichnung" & strNummer)
If change = "Projektoren" Then
.List = arrDaten1
Else
.List = arrDaten2
End If
End With
End Sub


Anzeige
AW: dynamische Userform- Klassenmodul Event
22.10.2013 11:21:22
novo
Super!!!!!! Klappt
Vielen vielen Dank für deine schnelle Hilfe.

AW: dynamische Userform- Klassenmodul Event
22.10.2013 11:20:59
Rudi
Hallo,
setz die Tag-Eigenschaft der Combobox = i, dann kannst du sie auswerten
Set newCbProduktTyp = ufartikelauswahl.Controls.Add("Forms.Combobox.1")
With newCbProduktTyp
.Name = "cbprodukttyp" & i
.Left = cbprodukttyp.Left
.Top = cbprodukttyp.Top * i
.Height = cbprodukttyp.Height
.Width = cbprodukttyp.Width
.AddItem ("Projektoren")
.AddItem ("Optiken")
.Value = "Projektoren"
.Tag = i
End With
Set bCommands(i).change = newCbProduktTyp
Private Sub change_Change()
If change = "Projektoren" Then
With ufartikelauswahl.Controls("cbartikelbezeichnung" & change.Tag)
.AddItem ("abc")
End With
Else
With ufartikelauswahl.Controls("cbartikelbezeichnung" & change.Tag)
.AddItem ("def")
End With
End If
End Sub

Gruß
Rudi

Anzeige
AW: dynamische Userform- Klassenmodul Event
22.10.2013 11:24:31
novo
Beide Varianten funktionieren.
Danke auch an dich!
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige