Ich erstelle ein Benutzerformular auf Excel 2007, das eine 6x6 Anordnung von Kombinationsfeldern hat. Die letzte Zeile und die letzte Spalte sind die 'all-up'-Felder, die basierend auf ihren jeweiligen Zeilen/Spalten einen Wert haben sollten. Die restlichen 25 (5 x 5) Kombinationsfelder haben 3 Werte (Rot, Gelb, Grün). Wenn ein Benutzer einen Wert auswählt, zeigt das Kombinationsfeld den Wert an und der Hintergrund wird mit dem ausgewählten Wert eingefärbt (durch Erstellen einer Funktion) in einem Modul und aufrufend in jedem combobox_change()).Excel VBA - Erstellen eines dynamischen Benutzerformulars mit mehreren Kombinationsfeldern und Speichern der Werte aller Kombinationsfelder in einem Array und Sortieren
Ich habe Probleme bei der Codierung der letzten Zeilen- und Spaltenfelder. Grundsätzlich, wenn für Zeile 1 gesagt wird, dass es sogar ein einzelnes "Rot" gibt, sollte das letzte Feld in Zeile 1 (1,6) automatisch rot werden. Wenn es kein Rot gibt, aber ein "Bernstein", sollte das letzte Feld "Bernsteinfarben" sein. Wenn "rot" und "gelb" vorhanden ist, sollte "rot" die Priorität erhalten. Eine ähnliche Logik für Spalten.
Was ich bisher versucht:
Innerhalb der Userform Code:
Private Sub Txt_Score_1_1_Change() 'This is for row 1 column 1 on the matrix'
Call ScoreChange.ScoreChange("Txt_Score_1_1")
Innerhalb eines Moduls:
Public Sub ScoreChange(ctrlName As String)
If Scorecard.Controls(ctrlName).Value = "R" Then
Scorecard.Controls(ctrlName).BackColor = vbRed
ElseIf Scorecard.Controls(ctrlName).Value = "G" Then
Scorecard.Controls(ctrlName).BackColor = vbGreen
ElseIf Scorecard.Controls(ctrlName).Value = "A" Then
Scorecard.Controls(ctrlName).BackColor = vbYellow
Else
Scorecard.Controls(ctrlName).BackColor = vbWhite
End If
For i = 1 To 5
For j = 1 To 5
If Scorecard.Controls("Txt_Score_" & i & "_" & j).Value <> "" Then
If Scorecard.Controls("Txt_Score_" & i & "_" & j).Value = "R" Then
Scorecard.Controls("Txt_Score_" & i & "_6").Value = "R"
Scorecard.Controls("Txt_Score_6_" & j).Value = "R"
ElseIf Scorecard.Controls("Txt_Score_" & i & "_" & j).Value = "A" Then
Scorecard.Controls("Txt_Score_" & i & "_6").Value = "A"
Scorecard.Controls("Txt_Score_6_" & j).Value = "A"
End If
End If
Next j
Next i
End Sub
Die oben arbeitet, um die einzelnen Farben der Kombinationsfelder zu ändern wenn geändert, fällt aber für die "total"/"all up" Boxen auseinander.
Was ich denke, getan werden muss, um das obige zu erreichen, ist, dass ich einen Code schreiben muss, der erkennt, wenn alle Kombinationsfelder für eine bestimmte Zeile/Spalte gefüllt sind, und speichert diese Werte in einem Array und erkennt innerhalb des Arrays den Wert für die letzte Box.
Jede Hilfe, wie dies zu erreichen ist, wird geschätzt.
Auch Entschuldigung, wenn etwas ähnliches woanders gepostet wurde, aber ich habe viel recherchiert und konnte nichts finden.
Danke.
Vielen Dank dafür. Es wirkt wie ein Zauber. Obwohl ich keine Ahnung habe, was eigentlich los ist ... denke ich, ich muss etwas über Klassen lernen. – Programmingnovice20
Froh, dass es für Sie funktioniert. Und ja, wenn Sie viel mit den Steuerelementen einer UserForm arbeiten, dann sollten Sie sich über die Klassen- und Ereignisbehandlung informieren, da diese Ihren Code wirklich vereinfachen können. Es ist nicht kompliziert und dauert nur etwa eine Stunde. Versuchen Sie hier für Anfänger: http://www.cpearson.com/excel/Events.aspx – Ambie