Benutzer mit den meisten Antworten
(noch) nicht vorhandener Code verhindert das debugging

Frage
-
Hi Community
Ich habe mal ein bißchen mit der VBIDE gespielt und das ganze ein bißchen durchgetestet. Klappt eigentlich prima, aber ein Problem ist übriggebieben.
Der Code, um den es geht, ist eigentlich recht simpel:
Private Sub btnTest_Click() Dim strText As String strText = "public sub HelloWorld" & vbCrLf & _ vbTab & "MsgBox ""Hello World""" & vbCrLf & _ "End Sub" CreateModuleText "modTest", strText HelloWorld End Sub
Die Prozedur CreateModuleText schreibt den text des Parameters strText in ein bestehendes CodeModule, wenn es nicht existiert, wird halt ein Neues angelegt. Darum geht es auch nicht, daher will ich Euch mit dem Code nicht belasten, das funktioniert ohne Probleme.
Das Problem tritt in der letzten Zeile auf, wenn ich die gerade erstellte Prozedur auch ausführen möchte. Der Debugger schmeißt mir das "HelloWorld" natürlich als nicht definierte Prozedur raus. Er hat ja auch recht, er kann ja nicht wissen, dass sie schon rechtzeitig da sein wird.
Hat jemand eine Idee?
Gruß
Roland
It's no problem, it's just the syntax
Antworten
-
Manchmal sieht man den Wald vor lauter Bäumen nicht.
1. Code nicht als Sub, sondern als Function schreiben
2. mit Eval("HelloWorld()") ausführen.
Na ja, vielleicht habe ich ja wenigstens jemand zum Spielen mit der VBIDE gebracht, dann war der Thread wenigsten zu irgendetwas gut.
Roland
It's no problem, it's just the syntax
- Als Antwort markiert Roland Grothe Mittwoch, 15. Mai 2013 10:10
Alle Antworten
-
Sorry, wenn es jemand testen will, hier ist die Funktion:
'requires "Microsoft Visual Basic For Applications Extesibility 5.3" Public Sub CreateModuleText(strModule As String, strText As String, Optional bInsertAtEnd As Boolean = True) Dim vbc As VBComponent On Error GoTo CreateModuleText_Err Set vbc = VBE.ActiveVBProject.VBComponents(strModule) If bInsertAtEnd = True Then vbc.CodeModule.InsertLines vbc.CodeModule.CountOfLines + 1, strText Else vbc.CodeModule.InsertLines vbc.CodeModule.CountOfDeclarationLines + 1, strText End If Set vbc = Nothing CreateModuleText_Exit: Set vbc = Nothing Exit Sub CreateModuleText_Err: Select Case Err.Number Case 9 'Modul existiert nicht Set vbc = VBE.ActiveVBProject.VBComponents.Add(vbext_ct_StdModule) vbc.Name = strModule DoCmd.Save acModule, strModule Resume Case Else MsgBox Err.Description, vbOKOnly + vbCritical, "Fehler: " & Err.Number Resume CreateModuleText_Exit End Select End Sub
It's no problem, it's just the syntax
- Als Antwort markiert Roland Grothe Mittwoch, 15. Mai 2013 10:08
- Tag als Antwort aufgehoben Roland Grothe Mittwoch, 15. Mai 2013 10:08
-
Manchmal sieht man den Wald vor lauter Bäumen nicht.
1. Code nicht als Sub, sondern als Function schreiben
2. mit Eval("HelloWorld()") ausführen.
Na ja, vielleicht habe ich ja wenigstens jemand zum Spielen mit der VBIDE gebracht, dann war der Thread wenigsten zu irgendetwas gut.
Roland
It's no problem, it's just the syntax
- Als Antwort markiert Roland Grothe Mittwoch, 15. Mai 2013 10:10