Hallo!
Ich habe folgendes Problem: Ich füge in ein Excel-Formular zur Laufzeit Steuerelemente ein. Nun will ich für diese Elementen eine Ereignisprozedur hinzufügen.
Ich habe das ganze mit CreateEventProc versucht. Dabei kommt immer die gleiche Fehlermeldung:
Laufzeitfehler ‚57017‘: Ereignisbehandlungsroutine ist ungültig!
Wenn ich das ganze mit einem vorher bestehenden Kontrollkästchen probier, dann funktionierts!
Könnt ihr mir weiterhelfen?
Grüße
Wolfgang
Ich habe folgendes Problem: Ich füge in ein Excel-Formular zur
Laufzeit Steuerelemente ein. Nun will ich für diese Elementen
eine Ereignisprozedur hinzufügen.
Ich habe das ganze mit CreateEventProc versucht. Dabei kommt
immer die gleiche Fehlermeldung:
Laufzeitfehler ‚57017‘: Ereignisbehandlungsroutine ist
ungültig!
Wenn ich das ganze mit einem vorher bestehenden
Kontrollkästchen probier, dann funktionierts!
Könnt ihr mir weiterhelfen?
Hi Wolfgang,
Klassenmodule sind schon schwierig. Teste mal nachfolgenden Code , wenn der zufriedenstellen gelöst wird kann man mal schauen…
Sub ttt()
Dim n As Byte, S1 As String, S2
S1 = "087111032105115116032100101114032067111100101063"
For n = 1 To Len(S1) Step 3
S2 = S2 & Chr(CInt(Mid(S1, n, 1) & Mid(S1, n + 1, 1) + Mid(S1, n + 2, 1)))
Next n
MsgBox S2
End Sub
Gruß
Reinhard
ok - sorry
Hier ist also der Code
Private Sub Checkbox1_Click()
Dim startline As Long, code2 As String, neuesElement As Control
If CheckBox1.Value = True Then
Set neuesElement = Controls.Add(„Forms.Checkbox.1“) 'neues Element hinzufügen
With ActiveWorkbook.VBProject. _
VBComponents(„UserForm1“).CodeModule
'neues Element soll den gleichen Code erhalten wie Checkbox1
code2 = „dim startline as long, code2 as String, neuesElement as Control“ & Chr(13) & _
"if " & neuesElement.Name & „.Value = True Then“ & Chr(13) & code
startline = .CreateEventProc(„Click“, neuesElement.Name) + 1
.InsertLines startline, code2
End With
End If
End Sub
Function code()
code = „Set neuesElement = Controls.ADD(“„Forms.Checkbox.1"“)" & Chr(13) & _
„Code2 = „„Dim StartLine as long, Code2 as string, neuesElement as Control““ & Chr(13) & _ " & Chr(13) & _
„“„if „“ & neuesElement.Name & „“.Value = True Then““ & Chr13 & code" & Chr(13) & _
„With ActiveWorkbook.VBProject. VBComponents(UserForm1.name).CodeModule“ & Chr(13) & _
„StartLine = .CreateEventProc(“„Click“",neuesElement.Name)+1" & Chr(13) & _
„.InsertLines StartLine, Code2“ & Chr(13) & _
„End With“ & Chr(13)
End Function
Entschuldigung, dass es so unübersichtlich ist, aber irgendwie hab ich das mit dem Einrücken nicht hinbekommen!
Im Prinzip soll in der Ereignisprozedur des neu erstellten Steuerelements der gleiche Code erscheinen, wie im vorangegangenen, sodass beim Setzen des Häkchens ein neues Steuerelement entsteht!
Das Problem dabei ist nun, dass beim Schritt „.InsertLines“ besagte Fehlermeldung erscheint.
Grüße
Wolfgang
Hallo Wolfgang,
Entschuldigung, dass es so unübersichtlich ist, aber irgendwie
hab ich das mit dem Einrücken nicht hinbekommen!
dann verwende doch mal den pre-Tag.
Dein Code
Was zwischen den Tags steht wird auch eingerückt dargestellt, dann ist Dein Code gut lesbar.
Gruß, Rainer
OT pre prehtml
Hallo Rainer,
bei w-w-w ist für mich neu jetzt auch ein prehtml-Tag zugelassen.
Klar kann ich mich und andere bei Selfhtml oder sonstigen Seiten durchwühlen um herauszufinden was da der genaue Unterschied zu dem pre-Tag ist.
Wäre natürlich besser jemand der das auswendig weiß erklärts mal hier auf die Schnelle. Aus der Beschreibung bei w-w-w werde ich nihct schlau was da die Unterschiede sein könnten.
Gruß
Reinhard
Hallo Reinhard,
bei w-w-w ist für mich neu jetzt auch ein prehtml-Tag
zugelassen.
Klar kann ich mich und andere bei Selfhtml oder sonstigen
Seiten durchwühlen um herauszufinden was da der genaue
Unterschied zu dem pre-Tag ist.
mit dem prehtml Tag schaltest Du alle eingeschlossenen Tags ab, ohne prehtml hätte in meinem vorigen Beitrag der pre Tag ‚gerarbeitet‘, du hättest die Syntax aber nicht sehen können. 
Zwei beispiele mit Bold, ein mal ohne prehtml Tag:
Test
und nun ein prehtml darum:
Test
Das kann man mit der Vorschaufunktion alles ausprobieren, man muß ja nicht alles abschicken. 
Gruß, Rainer
Jetzt ist es - aus meiner Sicht jedenfalls - übersichtlicher:
Private Sub Checkbox1\_Click()
Dim startline As Long, code2 As String, neuesElement As Control
If CheckBox1.Value = True Then
Set neuesElement = Controls.Add("Forms.Checkbox.1") 'neues Element hinzufügen
With ActiveWorkbook.VBProject. \_
VBComponents("UserForm1").CodeModule
'neues Element soll den gleichen Code erhalten wie Checkbox1
code2 = "dim startline as long, code2 as String, neuesElement as Control" & Chr(13) & \_
"if " & neuesElement.Name & ".Value = True Then" & Chr(13) & code
startline = .CreateEventProc("Click", neuesElement.Name) + 1
.InsertLines startline, code2
End With
End If
End Sub
Function code()
code = "Set neuesElement = Controls.ADD(""Forms.Checkbox.1"")" & Chr(13) & \_
"Code2 = ""Dim StartLine as long, Code2 as string, neuesElement as Control"" & Chr(13) & \_ " & Chr(13) & \_
"""if "" & neuesElement.Name & "".Value = True Then"" & Chr13 & code" & Chr(13) & \_
"With ActiveWorkbook.VBProject. VBComponents(UserForm1.name).CodeModule" & Chr(13) & \_
"StartLine = .CreateEventProc(""Click"",neuesElement.Name)+1" & Chr(13) & \_
".InsertLines StartLine, Code2" & Chr(13) & \_
"End With" & Chr(13)
End Function
Grüße
Wolfgang
Hallo Wolfgang,
Jetzt ist es - aus meiner Sicht jedenfalls - übersichtlicher:
ja, da kann ich nur zustimmen.
Gruß, Rainer