Hallo zusammen,
habe ein Problem und komme nicht weiter. Ich hoffe, dass mir hier geholfen werden kann.
Ich habe eine Userform mit 6 ComboBoxen, in denen verschiedene Eigeschaften vorzufinden sind.
Im Tabellenblatt "Daten" sind die Eigenschaften mit folgenden Faktoren vorzufinden.
Anzahl |
Faktor |
Matrial |
zweilagig |
vierlagig |
sechslagig |
achtlagig |
Oberfläche |
zweilagig |
vierlagig |
sechslagig |
achtlagig |
Dicke |
zweilagig |
vierlagig |
sechslagig |
achtlagig |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
zweilagig |
0,70 |
Matrial 1 |
1,00 |
1 |
1 |
1 |
Oberfläche 1 |
0,94 |
0,94 |
0,94 |
0,94 |
Dicke 0,8 |
0,89 |
0,91 |
0,95 |
- |
vierlagig |
1,00 |
Matrial 2 |
1,08 |
1,07 |
1,09 |
1,1 |
Oberfläche 2 |
0,95 |
0,95 |
0,95 |
0,95 |
Dicke 1,0 |
0,90 |
0,93 |
0,94 |
0,98 |
sechslagig |
1,25 |
Matrial 3 |
1,17 |
1,16 |
1,2 |
1,18 |
Oberfläche 3 |
1,00 |
1,00 |
1,00 |
1,00 |
Dicke 1,5 |
1,00 |
1,00 |
1,00 |
1,00 |
achtlagig |
1,58 |
Matrial 4 |
1,16 |
1,3 |
1,37 |
1,34 |
Oberfläche 4 |
1,11 |
1,18 |
1,17 |
1,18 |
Dicke 2,0 |
1,22 |
1,12 |
1,05 |
1,06 |
Bei meinem Code wird zur Zeit bei der Wahl der Eigenschaft immer nur der Faktor der ersten Spalte multipliziert. Wählt man Zb. bei Anzahl vierlagig und Matrial3 und Oberfläche4 wird 1*1,17*1,11. Es müsste allerdings 1*1,16*1,18 gerechnet werden, da man zu Beginn Anzahl vierlagig gewählt.
Der derzeitige Code sieht folgendermaßen aus:
Private Sub ComboBox1_Change()
lblErgebnis.Caption = Format(getTotal, "#,##0.00 €")
End Sub
Private Sub ComboBox2_Change()
lblErgebnis.Caption = Format(getTotal, "#,##0.00 €")
End Sub
Private Sub ComboBox3_Change()
lblErgebnis.Caption = Format(getTotal, "#,##0.00 €")
End Sub
Private Sub ComboBox4_Change()
lblErgebnis.Caption = Format(getTotal, "#,##0.00 €")
End Sub
Private Sub ComboBox5_Change()
lblErgebnis.Caption = Format(getTotal, "#,##0.00 €")
End Sub
Private Sub ComboBox6_Change()
lblErgebnis.Caption = Format(getTotal, "#,##0.00 €")
End Sub
Private Sub CommandButton2_Click()
Load UserForm2
UserForm2.Label1.Caption = Format(getTotal, "#,##0.00 €")
UserForm2.Show
End Sub
Private Sub Label1_Click()
End Sub
Private Sub UserForm_Initialize()
'ComboBox1 wird über VBA mit Inhalt gefüllt
ComboBox1.RowSource = "tblMerkmal1"
'Es kann nichts in ComboBox1 geschrieben werden
ComboBox1.Style = fmStyleDropDownList
'ComboBox2 wird über VBA mit Inhalt gefüllt
ComboBox2.RowSource = "tblMerkmal2"
'Es kann nichts in ComboBox2 geschrieben werden
ComboBox2.Style = fmStyleDropDownList
'ComboBox3 wird über VBA mit Inhalt gefüllt
ComboBox3.RowSource = "tblMerkmal3"
'Es kann nichts in ComboBox3 geschrieben werden
ComboBox3.Style = fmStyleDropDownList
'ComboBox4 wird über VBA mit Inhalt gefüllt
ComboBox4.RowSource = "tblMerkmal4"
'Es kann nichts in ComboBox4 geschrieben werden
ComboBox4.Style = fmStyleDropDownList
'ComboBox5 wird über VBA mit Inhalt gefüllt
ComboBox5.RowSource = "tblMerkmal5"
'Es kann nichts in ComboBox5 geschrieben werden
ComboBox5.Style = fmStyleDropDownList
'ComboBox6 wird über VBA mit Inhalt gefüllt
ComboBox6.RowSource = "tblMerkmal6"
'Es kann nichts in ComboBox6 geschrieben werden
ComboBox6.Style = fmStyleDropDownList
lblErgebnis.Caption = Format(getTotal, "#,##0.00 €")
End Sub
Private Sub OptionButton1_Click()
If Me.OptionButton1.Value Then
Me.ComboBox7.Visible = False
End If
End Sub
Private Sub OptionButton2_Click()
If Me.OptionButton2.Value Then
Me.ComboBox7.Visible = True
End If
End Sub
Private Function getTotal() As Currency
Dim ctl As MSForms.Control
Dim curWert As Currency
Dim curErgebnis As Currency
Dim blnCalc As Boolean
curErgebnis = 1
For Each ctl In Controls
If TypeOf ctl Is MSForms.ComboBox Then
Select Case ctl.Name
Case "ComboBox1", "ComboBox2", "ComboBox3", "ComboBox4", "ComboBox5", "ComboBox6"
If ctl.Value <> "" Then
blnCalc = True
curWert = Range(ctl.RowSource).Cells(ctl.ListIndex + 1, 2).Value
curErgebnis = curErgebnis * curWert
End If
End Select
End If
Next
Set ctl = Nothing
If Not blnCalc Then curErgebnis = 0
getTotal = curErgebnis
End Function
Ich hoffe, dass ich es einigermaßen verständlich erklärt habe und mir jemand bei meinem Problem helfen kann.
Vielen Dank im Vorraus.
|