Laufzeitfehler 57017

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…:smile:

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. :smile:

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. :smile:

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