Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen

Optimierung

Betrifft: Optimierung von: Sven
Geschrieben am: 19.08.2004 14:42:40

Hi,

ich hab ein Frage zur Optimierung von Code. Mit VBA kenn ich mich ganz gut aus, aber eher unter ASP. Mit Exel u. VBA hab ich bisher kaum was gemacht.
Ich hab folgenden Code:

Private Sub CheckBox1_Change()
    box1
End Sub

Private Sub CheckBox2_Change()
    box2
End Sub

Private Sub CheckBox3_Change()
    box3
End Sub



Sub box1()
If CheckBox1 And Range("D6").Value > 5 Then
Range("I6:L6") = Empty
Range("H6") = "1"
Range("I6:L6").Interior.ColorIndex = 48
Range("B6").Font.Strikethrough = True
Else
Range("H6") = "0"
Range("I6:L6").Interior.ColorIndex = 2
Range("B6").Font.Strikethrough = False
End If
End Sub

Sub box2()
If CheckBox4 And Range("D7").Value > 5 Then
Range("I7:L7") = Empty
Range("H7") = "1"
Range("I7:L7").Interior.ColorIndex = 48
Range("B7").Font.Strikethrough = True
Else
Range("H7") = "0"
Range("I7:L7").Interior.ColorIndex = 2
Range("B7").Font.Strikethrough = False
End If
End Sub

Sub box3()
If CheckBox5 And Range("D8").Value > 5 Then
Range("I8:L8") = Empty
Range("H8") = "1"
Range("I8:L8").Interior.ColorIndex = 48
Range("B8").Font.Strikethrough = True
Else
Range("H8") = "0"
Range("I8:L8").Interior.ColorIndex = 2
Range("B8").Font.Strikethrough = False
End If
End Sub

Das muß ich irgendwie optimieren. Es muß doch irgendwie ne Möglichkeit geben, da eine variable Prozedur draus zu machen. Z.B. indem ich einen oder mehrere Parameter mit übergebe.
Wäre super, wenn jemand nen Tipp oder ein Beispiel für mich hätte.

Gruss, Sven
  


Betrifft: AW: Optimierung von: Christian Sommer
Geschrieben am: 19.08.2004 17:52:42

Hi Sven,

Nenne deine Textboxen z.B.:
txtBox1, txtBox2, txtBox3

Mittels folgender Funktion rufst du deine Routine auf und übergibst dieser Routine das Objekt, das sie aufgerufen hat (z.B. anhand von Text box: txtBox1):

Private Sub txtBox1_Change()
  Call codeTextbox(txtBox1)
End Sub



Dann kanst du eine Subroutine für alle textboxen erstellen:

Sub codeTextbox(ByVal objCalling As Object)
msgbox objcalling.name
End Sub

Gruss Christian


  


Betrifft: AW: Optimierung von: Sven
Geschrieben am: 20.08.2004 11:12:37

Danke Thomas,

die Parameterübergabe, war schon genau das was ich brauchte!

Sieht jetzt so aus:

Private Sub CheckBox1_Change()
    Call box(CheckBox1)
End Sub

Private Sub CheckBox2_Change()
    Call box(CheckBox2)
End Sub

Private Sub CheckBox3_Change()
    Call box(CheckBox3)
End Sub


Sub box(ByVal objCalling As Object)
welchebox = objCalling.Name
Select Case welchebox
Case "CheckBox1"
i = "6"
Case "CheckBox2"
i = "7"
Case "CheckBox3"
i = "8"
End Select

If objCalling.Value And Range("D" & i).Value > 5 Then
Range("I" & i & ":L" & i) = Empty
Range("H" & i) = "1"
Range("I" & i & ":L" & i).Interior.ColorIndex = 48
Range("B" & i).Font.Strikethrough = True
Else
Range("H" & i) = "0"
Range("I" & i & ":L" & i).Interior.ColorIndex = 2
Range("B" & i).Font.Strikethrough = False
End If
End Sub

Gruss, Sven