Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1320to1324
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
Über VBA Combo/Textbox erstellen
23.07.2013 07:42:14
kultnoob
Guten Morgen,
eine simple Frage meinerseits. Wie lautet der Code, um eine Textbox und eine Combobox in eine Userform zu erstellen.
Dazu finde ich via google nichts passendes. Eine Combobox zu befüllen, eine Combobox in Excel zu erstellen... JA, da gibts Tonnen an Infos... Aber eine Combobox (und natürlich auch Textbox) in der Userform zu erstellen über einen Code... ERROR!!!
Danke für die Hilfe.

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Über VBA Combo/Textbox erstellen
23.07.2013 08:04:56
kultnoob
Ok hab eine Lösung gefunden.

Sub einfügen()
Dim t As Control
Set t = UserForm2.controls.Add("Forms.Combobox.1", Visible)
t.Left = 18
t.Top = 150
t.Width = 175
t.Height = 20
UserForm2.Show
End Sub
Damit kann ich arbeiten.
Danke für die Hilfe. :D

AW: Klappt nicht so...
23.07.2013 08:52:09
kultnoob
Hi,
jetzt muss ich dennoch fragen.
Mein Ziel, sobald ein Zellenwert (A22) nicht leer ist, soll er mir eine TextBox und Combobox in der Userform einfügen. Ist die darunterliegende Zelle (A23) ebenfalls nicht leer, dann soll er mir in der Userform eine weiter Textbox und ComboBox einfügen usw.
Wenn dann die letzte Zelle erreicht ist, dann soll er mir unten einen Commandbutton einfügen. Anbei mal der bisherige Beispielcode. Der meckert aber bei der Zeile
Set Box = UserForm2.controls.Add("Forms.TextBox" & b, Visible)
rum und sagt mir:
Laufzeitfehler '-2147221005 (800401f3)':
Ungültige Klassenzeichenfolge
Der Code:

Sub subble()
Dim Box As Control
Dim Grafik, a, b, c, lrow2
Grafik = ActiveWorkbook.Name
With Workbooks(Grafik).Sheets(2)
lrow2 = Sheets(2).UsedRange.Rows.Count
a = 0
b = 1
For c = 22 To lrow2
If .Cells(c, 1).Value  Empty Then _
Set Box = UserForm2.controls.Add("Forms.TextBox" & b, Visible)
Box.Left = 6
Box.Top = 54 + a
Box.Width = 60
Box.Height = 15
Set Box = UserForm2.controls.Add("Forms.ComboBox" & b, Visible)
Box.Left = 81
Box.Top = 54 + a
Box.Width = 66
Box.Height = 15
ElseIf .Cells(c, 1).Value = Empty Then _
Set Box = UserForm2.controls.Add("Form.CommandButton1", "Fertig", Visible)
Box.Left = 6
Box.Top = 78 + a
Box.Width = 140
Box.Height = 25
UserForm2.Height = 150 + a
a = a + 16.5
b = b + 1
Next c
End With
UserForm2.Show
End Sub
Wisst Ihr woran das liegt? Hat VBA ein Problem mit dem Hochzählen der Textboxen?
Vielen Dank für die Hilfe.

Anzeige
AW: Userform, Steuerelemente hinzufügen
23.07.2013 11:12:54
fcs
Hallo kultnoob,
da sind dir verschiedene Syntax-Fehler in den Anweisungen passiert.
Die Fertig-Schaltfläche solltest du nicht per Code erzeugen, sondern im Userform2 schon anlegen und per Code dann nur noch positionieren und ggf. in der Größe anpassen.
Du bekommst sonst Probleme, mit der Zuordnung des Codes, der beim Klick auf diese Schaltfläche ausgeführt werden soll bzw. es funktioniert dann wahrscheinlich nur mit einem entsprechenden Klassenmodul.
Wenn du die Steuerelemente anlegst, dann solltest du bei den Textboxen gleich die Tabellenwerte eintragen und bei den Comboboxen die Auswahlliste zuordnen.
Falls du in der Tabelle sehr viele Einträge hast dann muss die Höhe des Userforms begrenzt werden und entsprechende Scrollmöglichkeit aktiviert werden.
Gruß
Franz
Schaut dann etwa wie folgt aus.
Sub subble()
Dim Box As Control
Dim Grafik, a, b, c, lrow2
Dim arrAuswahlliste As Variant
Grafik = ActiveWorkbook.Name
arrAuswahlliste = Array("Auswahl 01", "Auswahl 02", "Auswahl 03", "Auswahl 04", _
"Auswahl 05", "Auswahl 06")
With Workbooks(Grafik).Sheets(2)
lrow2 = Sheets(2).UsedRange.Rows.Count
a = 0
b = 1
For c = 22 To lrow2
If .Cells(c, 1).Value  Empty Then
Set Box = UserForm2.Controls.Add("Forms.TextBox.1", "Textbox" & b, True)
Box.Left = 6
Box.Top = 54 + a
Box.Width = 60
Box.Height = 15
Box.Value = .Cells(c, 1).Value
Set Box = UserForm2.Controls.Add("Forms.ComboBox.1", "ComboBox" & b, True)
Box.Left = 81
Box.Top = 54 + a
Box.Width = 66
Box.Height = 15
Box.Object.List = arrAuswahlliste
UserForm2.Height = 150 + a
a = a + 16.5
b = b + 1
End If
Next c
'Fertig-Commandbutton positionieren
Set Box = UserForm2.cmbFertig  'Namen des Commandbuttons ggf. anpassen!
Box.Left = 6
Box.Top = 78 + a
Box.Width = 140
Box.Height = 25
'Anpassungen wenn Userformhöhe > Höhe Excel-Anwendungsfenster
If UserForm2.Height > Application.Height Then
UserForm2.ScrollBars = fmScrollBarsVertical
UserForm2.ScrollHeight = UserForm2.Height
UserForm2.Height = Application.Height
End If
End With
UserForm2.Show
End Sub

Anzeige
AW: Userform, Steuerelemente hinzufügen
23.07.2013 11:59:28
kultnoob
Hi fcs,
absolut geile Arbeit. Das funktioniert so wie ich das wollte. Vielen vielen Dank.
Die Deklarierung damit der Wert der Zelle direkt in die TextBox übernommen wird. Das wäre mein nächster Step gewesen. Die Deklarierung der ComboBox... Genial... Wieder was gelernt.
Habe nun auch verstanden wie das Einfügen von Formen funktioniert. Ja, ich habe sehr viele Syntaxfehler gemacht. Aber learning by doing.
Im nächsten Step wird hinter dem Button der bereits in der Userform existiert ein Code gelegt, dass die Werte der Textboxen auf Basis der Comboboxen sortiert.
In Deinem Beispiel, zuerst alle Werte untereinander die Auswahl 1 haben, dann die Werte die Auswahl 2 haben wieder darunter und das noch sortiert aufsteigend. Keine Ahnung wie das geht, aber das krieg ich irgendwie hin. Danach muss ich noch einen Weg finden, wie ein Diagramm in Powerpoint automatisch aktualisiert wird. Dann bin ich fertig.
Vielen vielen Dank für die Hilfe. Habe wieder etwas in VBA gelernt.

Anzeige
AW: Userform, Steuerelemente hinzufügen
24.07.2013 10:20:16
kultnoob
Hi,
nach langem hin und her bin ich an einem Punkt angelangt, an dem ich nicht mehr weiter weiß.
Mein nächster Step ist die Übernahme der Daten aus den Textboxen auf Basis der Comboboxen in das Exceldokument in Sheet 2 Zelle D22.
Im Beispiel von fcs wurden der Combobox verschiedene Auswahlmöglichkeiten zugewiesen.
Auswahl1
Auswahl2
Auswahl3
usw.
Mein Ziel ist, dass nun geschaut wird, bei welchen Comboboxen wurde Auswahl1 getroffen und diese sollen aufsteigend, beginnend ab D22 untereinander aufgelistet werden.
Im Beispiel
Textbox - Combobox
Teil 5 - Auswahl1
Teil 4 - Auswahl3
Teil 1 - Auswahl2
Teil 2 - Auswahl1
Teil 6 - Auswahl3
Dann sollte es so aussehen.
Teil 2
Teil 5
Teil 1
Teil 4
Teil 6
Mein bisheriger Code sieht folgendermaßen aus.

Private Sub CommandButton1_Click()
Dim a
'Sheet(2) einen Namen zuweisen
Grafik = ActiveWorkbook.Name
With Workbooks(Grafik).Sheets(2)
lrow2 = Sheets(2).UsedRange.Rows.Count
'Zähle, wie viele Zellen befüllt sind --> Dadurch wird die Anzahl der Text- und ComboBoxen  _
ermittelt.
a = WorksheetFunction.CountIf(.Range("A22:A" & lrow2), "")
'Variable für das Hochzählen der Text- und Comboboxen
b = 0
'Variable für die Schleife der Zellen für Spalte A und D
For c = 1 To a
'Übernahme der Daten aus der Userform
If b 
Mein Gedanke war, zähle zuerst wieviele Textboxen es gibt auf Basis der Werte ab Zelle A22 in Sheet2. Dadurch weiß ich, wieviel Text- und ComboBoxen es gibt. Der nächste Gedanke war, vergleiche eine Variable b = 1 und zähle hoch. Solange b kleiner ist wie a, soll er weiter alles durchzählen.
Danach soll geschaut werden, wenn in ComboBox1 Auswahl1 steht, notiere den Wert der Textbox in Zelle D22 und durchsuche die restlichen ComboBoxen. Ist noch einmal ein Wet in den ComboBoxen der Auswahl1 ist, dann schreibe diesen (sortiert) in zelle D23 usw...
Nur wie kann ich innerhalb der Schleife die ComboBoxen mit einer Variable ansprechen damit der Wert der Textbox aufsteigend ab Zelle D22 wiedergegeben wird?
Habt Ihr dazu eine Idee?

Anzeige
AW: Userform, Steuerelemente hinzufügen
24.07.2013 16:53:03
fcs
Hallo kultnoob,
hier ein Makro zur Umgruppierung der Daten.
Gruß
Franz
Private Sub cmbFertig_Click()
Dim Zeile As Long, b, Zeile_L As Long
Dim arrWerteBox(), arrWerteCombo() As String
With ActiveWorkbook.Sheets(2)
'Texboxwerte und Comboboxauswahlen in Arrays einlesen
b = 0
Zeile_L = 21
For Zeile = 22 To .UsedRange.Rows.Count
If .Cells(Zeile, 1)  "" Then
Zeile_L = Zeile
b = b + 1
ReDim Preserve arrWerteBox(1 To b)
ReDim Preserve arrWerteCombo(1 To b)
arrWerteBox(b) = Me.Controls("TextBox" & b)
If Me.Controls("ComboBox" & b).ListIndex  -1 Then
arrWerteCombo(b) = Me.Controls("ComboBox" & b).Value
End If
End If
Next Zeile
'Zeilen mit Daten ab Zeile 22 in Spalte 4 (D)
Zeile_L = 21
With Me.Controls("ComboBox" & 1)
'Liste der Combobox-Auswahlwerte abarbeiten
For Zeile = 0 To .ListCount - 1
For b = 1 To UBound(arrWerteCombo)
If arrWerteCombo(b) = .List(Zeile, 0) Then
Zeile_L = Zeile_L + 1
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 4) = arrWerteBox(b)
End If
Next b
Next
End With
'restliche Zeilen leeren in Spalte D
Do Until .Cells(Zeile_L, 1) = ""
Zeile_L = Zeile_L + 1
.Cells(Zeile_L, 4).ClearContents
Loop
End With
'Unload Me
End Sub

Anzeige
AW: Userform, Steuerelemente hinzufügen
25.07.2013 07:48:05
kultnoob
Hi Frank,
vielen vielen Dank. Nun muss ich mir eingestehen, ich wäre niemals auf diese Art von Code gekommen. Manche Befehle sind mir nicht bekannt. Habe mich ein wenig in der Hilfe eingelesen. Hatte aber mit ua. ReDim keine Erfahrungen.
Das Makro läuft nur hätte ich eine Frage. Ist es möglich innerhalb der Prozedur eine bzw. zwei Kleinigkeiten einzubauen?
Zum einem wäre es sehr praktisch, wenn die gewählten Werte innerhalb des Arrays aufsteigend sortiert werden würden falls das überhaupt geht. In Deinem Beispiel, absolut spitzen Arbeit, sortiert er mir die Werte so wie sie kommen auf Basis der Werte in der ComboBox nacheinander ohne aufsteigende Sortierung.
Die zweite "Kleinigkeit" wäre, der letzte Arraywert in der ComboBox, wenn dieser gewählt wird, wäre es möglich diesen als Summe anzugeben? In Zelle B22 bis usedrange.rows.count steht die Anzahl. Das wäre natürlich die Krönung des Ganzen.
im Beispiel.
Teil A - 4 - Auswahl 2
Teil B - 8 - Auswahl 1
Teil C - 1 - Auswahl 2
Teil D - 19 - Auswahl 7 (letzter Eintrag in der ComboBox)
Teil F - 3 - Auswahl 7 (letzter Eintrag in der ComboBox)
Teil j - 9 - Auswahl 2
Die Werte der Teile von ComboBox Wert 1 - 6 (7 Werte in der ComboBox) ordne ich einfach per Schleife zu. Das klappt bisher. Habe folgende Syntax am Ende angehängt und es funktioniet.

lrow2 = ActiveWorkbook.Sheets(2).UsedRange.Rows.Count
For i = 22 To lrow2
For j = 22 To lrow2
If ActiveWorkbook.Sheets(2).Cells(i, 4).Value = ActiveWorkbook.Sheets(2).Cells(j, 1) _
.Value Then _
ActiveWorkbook.Sheets(2).Cells(i, 5).Value = ActiveWorkbook.Sheets(2).Cells(j, 2) _
.Value
Next j
Next i
aber wäre es so möglich?
sortiert:
Teil B
Teil A
Teil C
Teil J
Auswahl 5 - und in der rechten nebenstehenden Zelle den Wert - 21 (Summe aus Teil D und Teil F)
Das wäre die absolute Krönung. Dies übersteigt aber mein Wissen bei weitem falls dies überhaupt möglich ist. Danach nerv ich nicht mehr... vorerst... :D
Und nochmal top Arbeit.... Vielen Dank...

Anzeige
AW: Userform, Steuerelemente hinzufügen
25.07.2013 11:16:20
fcs
Hallo kultnoob,
das Sortieren funktioniert innerhalb der Tabelle mit der Entsprechenden Excelfunktion einfacher, als Arrays im Code umzusortieren.
Ich hab das jetzt so gelöst.
1. Ich hab ein zusätzliches Array für die Anzahlwerte deklariert.
2. Beim Erstellen der Arrays für die Textboxen, denen ein Comboboxeintrag zugeordnet wurde, werden auch die Anzahlwerte aus Spalte B eingelsen
3. Die Auswahlliste der Comboboxen wird vom 0. bis zum vorletzten Eintrag abgearbeitet.
Dabei werden ab Zeile 22 die Textboxwerte in Spalte D, die Anzahlwerte in Spalte E und der Comboboxwerte in Spalte F eingetragen.
4. Der Zellbereich mit den eingetragenen Werten wird sortiert.
Die passende Sortierung muss du ggf. noch ändern.
5. Die Werte mit den Comboxeinträgen werden wieder gelöscht in Spalte F
6. Für den letzten Combobox-Auswahlwert wird die Summe gebildet und in die Folgezeile eingetragen.
Gruß
Franz
Private Sub cmbFertig_Click()
Dim Zeile As Long, b, Zeile_L As Long
Dim arrWerteBox(), arrWerteCombo() As String, arrAnzahl(), Summe_Letzte
With ActiveWorkbook.Sheets(2)
'Texboxwerte und Comboboxauswahlen in Arrays einlesen
b = 0
Zeile_L = 21
For Zeile = 22 To .UsedRange.Rows.Count
If .Cells(Zeile, 1)  "" Then
Zeile_L = Zeile
b = b + 1
ReDim Preserve arrWerteBox(1 To b)
ReDim Preserve arrWerteCombo(1 To b)
ReDim Preserve arrAnzahl(1 To b)
arrWerteBox(b) = Me.Controls("TextBox" & b)
If Me.Controls("ComboBox" & b).ListIndex  -1 Then
arrWerteCombo(b) = Me.Controls("ComboBox" & b).Value
End If
arrAnzahl(b) = .Cells(Zeile, 2) 'Anzahl aus Spalte B einlesen
End If
Next Zeile
'Zeilen mit Daten ab Zeile 22 in Spalte 4 (D)
Zeile_L = 21
With Me.Controls("ComboBox" & 1)
'Liste der Combobox-Auswahlwerte abarbeiten bis vorletzen Eintrag
For Zeile = 0 To .ListCount - 2
For b = 1 To UBound(arrWerteCombo)
If arrWerteCombo(b) = .List(Zeile, 0) Then
Zeile_L = Zeile_L + 1
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 4) = arrWerteBox(b)
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 5) = arrAnzahl(b)
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 6) = arrWerteCombo(b)
End If
Next b
Next
End With
'Sortieren
If Zeile_L > 22 Then
With .Range(.Cells(22, 4), .Cells(Zeile_L, 6))
'Sortieren nach Wert aus Spalte A
.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlNo
'oder
'Sortieren nach Eintrag in Combobox und Wert aus Spalte A
'      .Sort key1:=.Range("C1"), order1:=xlAscending, _
key2:=.Range("A1"), Order2:=xlAscending, Header:=xlNo
End With
End If
'Comboboxeinträge in Tabelle wieder löschen
.Range(.Cells(22, 6), .Cells(Zeile_L, 6)).ClearContents
'Anzahl-Werte zu Textboxen mit letztem Comboboxeintrag aufsummieren
With Me.Controls("ComboBox" & 1)
Summe_Letzte = 0
For b = 1 To UBound(arrWerteCombo)
If arrWerteCombo(b) = .List(.ListCount - 1, 0) Then
Summe_Letzte = Summe_Letzte + arrAnzahl(b)
End If
Next b
Zeile_L = Zeile_L + 1
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 4) = .List(.ListCount - 1, 0)
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 5) = Summe_Letzte
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 6).ClearContents
End With
'restliche Zeilen leeren in Spalte D bis F
Do Until .Cells(Zeile_L, 1) = ""
Zeile_L = Zeile_L + 1
.Range(.Cells(Zeile_L, 4), .Cells(Zeile_L, 6)).ClearContents
Loop
End With
'Unload Me
End Sub

Anzeige
AW: Userform, Steuerelemente hinzufügen
25.07.2013 13:02:56
kultnoob
Hi fcs,
vielen Dank für den Code. Funktioniert fast. Im Punkt 4 bei der Sortierung habe ich noch Schwierigkeiten.
Wenn ich es richtig verstanden habe, läuft die Sortierung über folgenden Bereich:

If Zeile_L > 22 Then
With .Range(.Cells(22, 4), .Cells(Zeile_L, 6))
'Sortieren nach Wert aus Spalte A
'        .Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlNo
'oder
'Sortieren nach Eintrag in Combobox und Wert aus Spalte A
.Sort key1:=.Range("C1"), order1:=xlAscending
'            key2:=.Range("A1"), Order2:=xlAscending, Header:=xlNo
End With
End If
Doch leider nicht so, wie ich erhofft habe bzw. fast nicht. Er bringt mir die Sortierung zum Teil durcheinander. Zur Zeit sortiert er so wenn der Code wie oben beschrieben gesetzt wird:
Wert in ComboBox
Auswahl 1
Auswahl 2
Auswahl 3
Auswahl 4
Auswahl 5
Auswahl 6
Auswahl 7
sortiert:
Auswahl 4
Auswahl 1
Auswahl 2
Auswahl 5
Auswahl 3
Auswahl 6
Auswahl 7 (wird zusammengefasst --> absolut genial)
Oder suche ich gerade an der falschen Stelle?
Zum Gegencheck habe ich die Reihenfolge der Teile verändert. Leider verhaut er es immer noch. Mhhh...
Aber trotzdem vielen Dank. Die Änderung im Code in Bezug auf den letzten Wert in der ComboBox ist absolut geil.

Anzeige
AW: Userform, Steuerelemente hinzufügen
25.07.2013 15:18:05
fcs
Hallo kultnoob,
für das Sortieren ist schon der von dir gezeigte Code-Abschnitt zuständig.
Aber wie hättest du es denn jetzt gern sortiert?
In der Reihenfolge wie die Auswahlwerte in der in der Auswahlliste in der Combobox erscheinen scheinbar nicht. Zumindest dann nicht, wenn die Reihenfolge der Textboxeinträge so ist wie in der Spalte A (Zustand ohne Sortierung).
Nach den Werte der Spalte A (Textboxeinträgen) = 1. Sortierung
Nach den Werten in der Comboboxauswahl und danach den Textbox-Werten = 2. Sortierung
Eine der beiden Sortierungen muss du jetzt weglassen.
    If Zeile_L > 22 Then
'Sortieren nach nach Wert aus Spalte A (Textboxwerte)
With .Range(.Cells(22, 4), .Cells(Zeile_L, 6))
.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlNo
End With
'oder
'Sortieren 1. nach Einträgen in Combobox und 2. Werten aus Spalte A (Textboxwerte)
With .Range(.Cells(22, 4), .Cells(Zeile_L, 6))
.Sort key1:=.Range("C1"), order1:=xlAscending, _
key2:=.Range("A1"), Order2:=xlAscending, Header:=xlNo
End With
End If

Oder willst du ganz was anderes?
Gruß
Franz

Anzeige
AW: Userform, Steuerelemente hinzufügen
26.07.2013 08:25:22
kultnoob
Hi fcs,
sorry für die späte Antwort. War gestern noch ziemlich beschäftigt.
Mein Gedanke ist, ich erkläre es Dir falsch. Anbei ein neuer Versuch
Der Codeteil

arrAuswahlliste = Array("Auswahl 01", "Auswahl 02", "Auswahl 03", "Auswahl 04", _
"Auswahl 05", "Auswahl 06", "Auswahl 07")
gibt die Auswahlmöglichkeiten in der ComboBox an. Das passt soweit.
Auf Basis dieser Werte soll die Sortierung von statten gehen.
Im Beispiel:
In der Liste Zelle A22 Sheet2 wird folgendes angezeigt werden.
Teil A
Teil B
Teil 7
Teil 12
Teil 4
.
.
.
usw.
Dann öffnet sich die Userform und ich sortiere zu
Teil A - Auswahl 3
Teil B - Auswahl 1
Teil 7 - Auswahl 7
Teil 12 - Auswahl 1
Teil 4 - Auswahl 4
.
.
.
usw.
Zuerst sollen alle Teile welche mit Auswahl 01 zugeordnet sind aufsteigend sortiert werden. Danach Auswahl 02 bis Auswahl 06. Auswahl 07 ist seperat.
Zur Zeit bringt er die Auswahl ein wenig durcheinander. Warum? Keine Ahnung. Dein Code übersteigt mein bescheidenes Wissen bei weitem. Vielleicht verstehe ich auch nicht Deinen Ansatz sodass ich die Sortierung falsch angebe...

AW: Userform, Steuerelemente hinzufügen
27.07.2013 05:08:15
fcs
Hallo kultnoob,
hier ein neuer Anlauf.
Die Sortierung der Werte erfolgt jetzt jedes mal, wenn zu einem Comboboxeintrag die Textboxwerte in die Tabelle eingetragen wurden.
Gruß
Franz
Private Sub cmbFertig_Click()
Dim Zeile As Long, b, Zeile_L As Long, Zeile1 As Long
Dim arrWerteBox(), arrWerteCombo() As String, arrAnzahl(), Summe_Letzte
With ActiveWorkbook.Sheets(2)
'Texboxwerte und Comboboxauswahlen in Arrays einlesen
b = 0
Zeile_L = 21
For Zeile = 22 To .UsedRange.Rows.Count
If .Cells(Zeile, 1)  "" Then
Zeile_L = Zeile
b = b + 1
ReDim Preserve arrWerteBox(1 To b)
ReDim Preserve arrWerteCombo(1 To b)
ReDim Preserve arrAnzahl(1 To b)
arrWerteBox(b) = Me.Controls("TextBox" & b)
If Me.Controls("ComboBox" & b).ListIndex  -1 Then
arrWerteCombo(b) = Me.Controls("ComboBox" & b).Value
End If
arrAnzahl(b) = .Cells(Zeile, 2) 'Anzahl aus Spalte B einlesen
End If
Next Zeile
'Zeilen mit Daten ab Zeile 22 in Spalte 4 (D)
Zeile_L = 21
With Me.Controls("ComboBox" & 1)
'Liste der Combobox-Auswahlwerte abarbeiten bis vorletzen Eintrag
For Zeile = 0 To .ListCount - 2
Zeile1 = Zeile_L + 1
For b = 1 To UBound(arrWerteCombo)
If arrWerteCombo(b) = .List(Zeile, 0) Then
Zeile_L = Zeile_L + 1
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 4) = arrWerteBox(b)
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 5) = arrAnzahl(b)
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 6) = arrWerteCombo(b)
End If
Next b
If Zeile_L > Zeile1 Then
'Sortieren nach Wert aus Textboxen, wenn mehr als 1 Text einer Auswahl _
zugeordnet wurde
With ActiveWorkbook.Sheets(2)
With .Range(.Cells(Zeile1, 4), .Cells(Zeile_L, 6))
.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlNo
End With
End With
End If
Next
End With
'Comboboxeinträge in Tabelle wieder löschen
.Range(.Cells(22, 6), .Cells(Zeile_L, 6)).ClearContents
'Anzahl-Werte zu Textboxen mit letztem Comboboxeintrag aufsummieren
With Me.Controls("ComboBox" & 1)
Summe_Letzte = 0
For b = 1 To UBound(arrWerteCombo)
If arrWerteCombo(b) = .List(.ListCount - 1, 0) Then
Summe_Letzte = Summe_Letzte + arrAnzahl(b)
End If
Next b
Zeile_L = Zeile_L + 1
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 4) = .List(.ListCount - 1, 0)
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 5) = Summe_Letzte
ActiveWorkbook.Sheets(2).Cells(Zeile_L, 6).ClearContents
End With
'restliche Zeilen leeren in Spalte D bis F
Do Until .Cells(Zeile_L, 1) = ""
Zeile_L = Zeile_L + 1
.Range(.Cells(Zeile_L, 4), .Cells(Zeile_L, 6)).ClearContents
Loop
End With
'Unload Me
End Sub

AW: Userform, Steuerelemente hinzufügen
29.07.2013 09:45:56
kultnoob
Hi fcs,
danke für die Antwort. Getestet und es funktioniert. Werde noch weitere Testdurchläufe starten.
Für deine Hilfe und für Deine Geduld vielen vielen Dank.
War nicht einfach aber es hat funktioniert. Daran sehe ich wieder, dass ich noch sehr viel lernen muss.
Vielen vielen Dank. Fürs erste habe ich keine Fragen mehr.
Danke, vielen vielen Dank für Deine Hilfe, Geduld, Know-How.

AW: Userform, Steuerelemente hinzufügen
25.07.2013 11:34:52
kultnoob
Hi fcs,
einen Teil habe ich schon geschafft. Zwar auf anderem Wege aber vollkommen ausreichend.
Die Daten der Auswertung stammen von 2 Exportdateien.
Nun zählt es die Anzahl mit folgendem Code

q = 2
lRow = Sheets(1).UsedRange.Rows.Count
For i = 2 To lRow
If WorksheetFunction.CountIf(.Range(.Cells(2, 3), .Cells(i, 3)), .Cells(i, 3)) = 1 Then
Sheets(3).Cells(q, 1).Value = "BR" & .Cells(i, 3).Value
Sheets(3).Cells(q, 2).Value = WorksheetFunction.CountIf(.Columns(3), Cells(i, 3))
q = q + 1
End If
und speichert die in einem neu angelegtem Sheet welche und wie viele Teile jeweils vorkommen. Dann werden die Daten sortiert, kopiert und im Zielsheet eingefügt und das Hilfssheet wird wieder gelöscht. Somit kann ich dann die Zuordnung in der ComboBox wählen und es ist alles sortiert.
Die Frage der Zusammenfassung von Auswahl 7 in der ComboBox bleibt bestehen. Dafür habe ich leider noch keine Lösung gefunden.

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige