none
(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

    Mittwoch, 15. Mai 2013 09:33

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
    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
    Mittwoch, 15. Mai 2013 09:46
  • 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
    Mittwoch, 15. Mai 2013 10:10