Hallo Bobbes,
ich mach hier mal einen auf Quereinsteiger...
Also ein fehlendes "End If" habe ich auch nicht bemerkt, dafür aber einige andere Dinge. Z.B. lassen sich die Numx_SelectionChanged mit einem Select...Case besser lesen:
Sub Num1_ValueChanged
txtring1.Visible = true
txtring1.BringToFront
num1.Minimum = 1
If num1.Value <> 0 Then
txtwert1.text = num1.Value
End If
Select num1.Value
Case 1
txtring1.Color=cBrown
Case 2
txtring1.Color=cRed
Case 3
txtring1.Color=cOrange
Case 4
txtring1.Color=cYellow
Case 5
txtring1.Color=cGreen
Case 6
txtring1.Color=cblue
Case 7
txtring1.Color=cPurple
Case 8
txtring1.Color=cGray
Case 9
txtring1.Color=cWhite
End Select
End Sub
Sub Num2_ValueChanged
txtring2.Visible = true
txtring2.BringToFront
num2.Minimum = 0
txtwert2.text = num2.Value
Select num2.Value
Case 0
txtring2.Color=cBlack
Case 1
txtring2.Color=cBrown
Case 2
txtring2.Color=cRed
Case 3
txtring2.Color=cOrange
Case 4
txtring2.Color=cYellow
Case 5
txtring2.Color=cGreen
Case 6
txtring2.Color=cblue
Case 7
txtring2.Color=cPurple
Case 8
txtring2.Color=cGray
Case 9
txtring2.Color=cWhite
End Select
End Sub
Sub Num3_ValueChanged
txtring3.Visible = true
txtring3.BringToFront
txtwert3.text = ""
Select num3.Value
Case 0
txtring3.Color=cBlack
Case 1
txtring3.Color=cBrown
txtwert3.text = "0"
Case 2
txtring3.Color=cRed
txtwert3.text = "00"
Case 3
txtring3.Color=cOrange
txtwert3.text = "000"
Case 4
txtring3.Color=cYellow
txtwert3.text = "0000"
Case 5
txtring3.Color=cGreen
txtwert3.text = "00000"
Case 6
txtring3.Color=cBlue
txtwert3.text = "000000"
txtzehntel.Visible = false
txtzehntel.Visible = false
Case 7
txtring3.Color=cGold
txthundertstel.Visible = false
txtzehntel.Visible = true
Case 8
txtring3.Color=cSilver
txthundertstel.Visible = true
txtzehntel.Visible = false
End Select
End Sub
Sub Num4_ValueChanged
txtring4.Visible = true
txtring4.BringToFront
Select num4.Value
Case 1
txtring4.Color=cBrown
txtwert4.text="+/- 1%"
Case 2
txtring4.Color=cRed
txtwert4.text="+/- 2%"
Case 3
txtring4.Color=cGold
txtwert4.text="+/- 5%"
Case 4
txtring4.Color=cSilver
txtwert4.text="+/- 10%"
End Select
End Sub
Weiterhin stellt sich die Frage, ob Du mit einem externen Editor arbeitest, weil in vielen If End If Konstrukten eine Einrückung fehlt. Eine solche Einrückung macht den Code deutlich lesbarer, auch für den Entwickler selbst. Da sieht man dann auch eher ein fehlendes "End If"...
In den GROßEN If-Schleifen für 230 und 400 Volt gibt es zwei überflüssige Abfragen, weil innerhalb dieser Schleifen bei der Verlegeart noch einmal auf Spannung = 230 bzw. 400 geprüft wird.
Als nächstes kann man sicherlich die folgenden Zeilenpaare
If Spalte = 1 AND txtQuerStrom.Text <= tableVerlegeart.Cell("A1/2",Reihe) Then
QuerTabelle = tableVerlegeart.Cell ("mm²",reihe+1)
MaxStrom = tableVerlegeart.Cell("A1/2",Reihe)
QuergrosserQuertabelle = "Querschnittvorschlag : "&Round(Quertabelle,2)&" mm²"
End If
If Spalte = 1 AND txtQuerStrom.Text >= tableVerlegeart.Cell("A1/2",Reihe) Then
QuerTabelle = tableVerlegeart.Cell ("mm²",reihe+1)
MaxStrom = tableVerlegeart.Cell("A1/2",Reihe)
QuergrosserQuertabelle = "Querschnittvorschlag : "&Round(Querschnitt,2)&" mm²"
End If
besser durch so etwas ersetzen
If Spalte = 1 Then
QuerTabelle = tableVerlegeart.Cell ("mm²",reihe+1)
MaxStrom = tableVerlegeart.Cell("A1/2",Reihe)
If txtQuerStrom.Text >= tableVerlegeart.Cell("A1/2",Reihe) Then
QuergrosserQuertabelle = "Querschnittvorschlag : "&Round(Querschnitt,2)&" mm²"
Else
QuergrosserQuertabelle = "Querschnittvorschlag : "&Round(Quertabelle,2)&" mm²"
End If
End If
Der Code wird somit etwas kompakter und die AND-Verknüpfungen entfallen.
Dann gibt es noch weitere Stellen, an denen eine zweite If Abfrage durch ein einfache Else ersetzt werden kann. Z.B. statt
If Leistfaktor = 1 Then ScheinleistText = ""
If leistfaktor <> 1 Then
OhmScheinLeistText = " VA"
OhmBlindLeistText = " var"
Scheinleist = Round(spannung2*txtohmstrom.Text*wurzel3,2)
BlindLeist = Round(Sqrt((spannung2*spannung2*txtohmstrom.Text*txtohmstrom.Text*wurzel3*wurzel3)-(txtohmStrom.Text*txtohmStrom.Text*spannung2*spannung2*Leistfaktor*Leistfaktor*Wurzel3*Wurzel3)),2)
If Scheinleist > 1000 Then
Scheinleist = Round(Scheinleist / 1000,2)
OhmScheinLeistText = " kVA"
Blindleist = Round(Blindleist / 1000,2)
OhmBlindLeistText = " kvar"
ScheinleistText= "Scheinleistung : "&Scheinleist&" "&OhmScheinLeistText&crlf&"Blindleistung : "&BlindLeist&" "&OhmBlindLeistText
End If
End If
folgendes Konstrukt verwenden
If Leistfaktor = 1 Then
ScheinleistText = ""
Else
OhmScheinLeistText = " VA"
OhmBlindLeistText = " var"
Scheinleist = Round(spannung2*txtohmstrom.Text*wurzel3,2)
BlindLeist = Round(Sqrt((spannung2*spannung2*txtohmstrom.Text*txtohmstrom.Text*wurzel3*wurzel3)-(txtohmStrom.Text*txtohmStrom.Text*spannung2*spannung2*Leistfaktor*Leistfaktor*Wurzel3*Wurzel3)),2)
If Scheinleist > 1000 Then
Scheinleist = Round(Scheinleist / 1000,2)
OhmScheinLeistText = " kVA"
Blindleist = Round(Blindleist / 1000,2)
OhmBlindLeistText = " kvar"
ScheinleistText= "Scheinleistung : "&Scheinleist&" "&OhmScheinLeistText&crlf&"Blindleistung : "&BlindLeist&" "&OhmBlindLeistText
End If
End If
Auch hier sieht der Code m.E. eleganter und lesbarer aus.
So, ich hoffe, ich habe Dich jetzt mit meiner Antwort nicht erschlagen :sign0013:
Aber wer fragt, muss auch damit rechnen, dass jemand ausführlich(!) antwortet...
Viele Grüße
specci48