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

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

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.


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

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


Anzeige
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

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!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige