AW: Ereignis von Laufzeit-Checkbox
09.04.2008 06:54:56
Laufzeit-Checkbox
Es geht auch ohne Klassenmodul, aber recht unelegant. Man kann den nötigen Code zur Laufzeit erzeugen. Hier mal ein Ausschnitt aus einem Code, den ich vor lannger Zeit gestrickt habe (fragt mich nicht mehr nach Details dazu :-):
...
' hier werden zwei Knöpfe und die Checkbox angelegt:
' Buttons für O.K. oder Abbruch anlegen
Set OK_Button = Kurse_aktualisieren.Designer.Controls.Add("Forms.CommandButton.1")
With OK_Button
.Left = 124
.Top = 30 + 20 * (Anzahl_Aktien + 2)
.Width = 48
.Height = 18
.Caption = "OK"
.Cancel = False
.Default = True
.Name = "Command_OK"
End With
Set Abbruch_Button = Kurse_aktualisieren.Designer.Controls.Add("Forms.CommandButton.1")
With Abbruch_Button
.Left = 208
.Top = 30 + 20 * (Anzahl_Aktien + 2)
.Width = 48
.Height = 18
.Caption = "Abbruch"
.Cancel = True
.Default = False
.Name = "Command_Abbruch"
End With
Set Kopieren_CheckBox = Kurse_aktualisieren.Designer.Controls.Add("Forms.CheckBox.1")
With Kopieren_CheckBox
.Left = 240
.Top = 6
.Height = 15
.Caption = "Kopieren"
.Value = False
.Name = "Kopieren_CheckBox"
End With
' hier wird der dazu gehörige Code zur Laufzeit erzeugt:
' Definition des Code Modules für das Formular
With Kurse_aktualisieren.CodeModule
i = .CountOfLines
If i = 2 Then
.InsertLines i, "": i = i + 1
Else
i = 1
End If
' Definition der Prozedur für den OK Button
.InsertLines i, "Private Sub Command_OK_Click()": i = i + 1
.InsertLines i, "Datum_Pub = Datum_neu": i = i + 1
.InsertLines i, "Abbruch = False": i = i + 1
.InsertLines i, "LeereEingabe = False": i = i + 1
.InsertLines i, "Kopieren_Kurse_Kommentar = Kopieren_Kurse_Wert.Value": i = i + 1
For Index = 1 To Anzahl_Aktien
.InsertLines i, "If Feldwert_" + CStr(Index) + ".Value """" Then": i = i + 1 ' """" _
= "", da sonst das Ende des Strings erkannt würde
.InsertLines i, " Kurs_Pub(" + CStr(Index) + ") = Feldwert_" + CStr(Index) + ".Value" _
: i = i + 1
.InsertLines i, "Else": i = i + 1
.InsertLines i, " LeereEingabe = True": i = i + 1
.InsertLines i, "End If": i = i + 1
Next Index
.InsertLines i, "Unload Me": i = i + 1
.InsertLines i, "End Sub": i = i + 1
' Definition der Prozedur für den Abbruch Button
.InsertLines i, "Private Sub Command_Abbruch_Click()": i = i + 1
.InsertLines i, "Abbruch = True": i = i + 1
.InsertLines i, "Unload Me": i = i + 1
.InsertLines i, "End Sub": i = i + 1
' Definition der Prozedur für das Schließen Feld. Hier Schließen = Abbruch
.InsertLines i, "Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)" _
: i = i + 1
.InsertLines i, "If CloseMode = vbFormControlMenu Then Abbruch = True": i = i + 1
.InsertLines i, "End Sub": i = i + 1
' Definition der Prozedur für die Kopieren Checkbox
Kopieren_Kurs = False
.InsertLines i, "Private Sub Kopieren_CheckBox_Click()": i = i + 1
.InsertLines i, "If Kopieren_CheckBox.Value = False Then": i = i + 1
.InsertLines i, "Kopieren_Kurse_Label.Visible = False": i = i + 1
.InsertLines i, "Kopieren_Kurse_Wert.Visible = False": i = i + 1
For Index = 1 To Anzahl_Aktien
.InsertLines i, "Feldwert_" + CStr(Index) + ".Value = """"": i = i + 1
Next Index
.InsertLines i, "Else": i = i + 1
.InsertLines i, "Kopieren_Kurs = True": i = i + 1
.InsertLines i, "Kopieren_Kurse_Label.Visible = True": i = i + 1
.InsertLines i, "Kopieren_Kurse_Wert.Visible = True": i = i + 1
For Index = 1 To Anzahl_Aktien
.InsertLines i, "Feldwert_" + CStr(Index) + ".Value = Letzter_Kurs(" + CStr(Index) + ") _
": i = i + 1
Next Index
.InsertLines i, "End If": i = i + 1
.InsertLines i, "End Sub": i = i + 1
End With
Unelegant, aber läuft seit Jahren.
Gruß Harald