Anführungsstriche in Strings/Codemodule

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Anführungsstriche in Strings/Codemodule

#1

Beitrag von d'r Bastler »

Moin allerseits,

hier mal ein Spickzettel zu einem Thema, an dem ich bisher unnötig lange herumprobiert habe:
Wie kann ich einen String erzeugen, der Anführungsstriche (AZ) enthält?
VBA versteht solche Anweisungen zum Teil nur mit bis zu mit fünf AZ hintereinander und ist dadurch recht unübersichtlich. Der folgende Code baut ein Beispiel, in dem alle (von mir bisher benötigten) Fälle abgebildet sind. Der Code gehört in ein allg. Modul und benötigt ein Zielmodul, in das der dynamisch generierte Code geschrieben wird - hier mdlTest

Code: Alles auswählen

Option Explicit

Sub WriteCode()
Dim wb As Workbook, mdl As Object, sCode As String
Set wb = ThisWorkbook
Set mdl = wb.VBProject.VBComponents("mdlTest").CodeModule

With mdl
'erst mal aufräumen, d.h. vorherigen Code löschen
        .DeleteLines 1, .CountOfLines            'löscht bisherigen Code im mdl
        .insertlines (1), "Option Explicit"      'ersetzt Zeile 1
    
'nun ein Grundgerüst bauen
    sCode = _
        "Sub CodeTest()" & vbNewLine & _
        "Dim sPDF As String, sPath As String" & "'" & "Hochkomma für Kommentare" & vbNewLine & _
        "sPath = ThisWorkbook.Path & ""\"" " & vbTab & "'" & "AZ für den Backslash" & vbNewLine & _
        "If InStr(Application.ActivePrinter, ""PDF"") Then" & vbTab & "'" & "AZ für PDF" & vbNewLine & _
        vbTab & "sPDF = sPath & Date & "" "" & ActiveSheet.Name & "" "" & Environ$(""computername"") & "".pdf""" & vbTab & "'" & "AZ für Blanks" & vbNewLine & _
        vbTab & "If sDefault = """" Then" & vbTab & "'" & "AZ für DoppelAZ" & vbNewLine & _
        vbTab & "End If" & vbNewLine & vbNewLine & _
        "End If" & vbNewLine & vbNewLine & _
        vbTab & "MsgBox sPDF, , ""Gedruckt:""" & vbTab & "'" & "AZ für String in AZ" & vbNewLine & _
        "End Sub"
        
'und einfügen. Können tut das noch nichts
        .addfromstring sCode
End With
End Sub
In mdlTest erscheint dann dieser Code, der die gängigen Fälle abbildet, ansonsten aber völlig funktionslos ist. Denn hier spielen allein die Syntax und die Kommentare die Hauptrolle.

Code: Alles auswählen

Option Explicit
Sub CodeTest()
Dim sPDF As String, sPath As String 'Hochkomma für Kommentare
sPath = ThisWorkbook.Path & "\"     'AZ für den Backslash
If InStr(Application.ActivePrinter, "PDF") Then 'AZ für PDF
    sPDF = sPath & Date & " " & ActiveSheet.Name & " " & Environ$("computername") & ".pdf"  'AZ für Blanks
    If sDefault = "" Then   'AZ für DoppelAZ
    End If

End If

    MsgBox sPDF, , "Gedruckt:"  'AZ für String in AZ
End Sub
Es werden hier drei Methoden der Code-Manipulation vorgestellt: .addfromstring und insertlines / Deletelines. In Kombination ergibt das ein spaßiges Werkzeug.
Tipp zum Debugging: Der VBE neigt dazu bei Fehlern in langen Befehlszeilen oder Strings, die mit Unterstrichen umgebrochen sind, eben diesen Unterstrich zu killen. Das zuverlässig zu entdecken, war ein Teil meines z.T. verzweifelten Lernprozesses.

Viel Spaß damit und schöne Grüße
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: Anführungsstriche in Strings/Codemodule

#2

Beitrag von d'r Bastler »

Moin allerseits,

der ein oder andere mag von dem Code-Moloch oben etwas erschlagen sein, deshalb hier ein vereinfachter, illustrierter Spickzettel für die Konstruktion von sCode:
Anführungszeichen im String.jpg
Anführungszeichen im String.jpg (208.52 KiB) 1905 mal betrachtet
Für die Beispiele & Anhang und Kommentar sind die & hier notwendig, weisen aber noch auf die Möglichkeit damit außerhalb einer Maske weitere zu ergänzen. Der Einsatz von _, &, vbNewLine und vbTab ist oben beschrieben.

Als Tipp zum einfachen Testen: Die gewünschte Zeile einfach mal per MsgBox ausgeben ;-)

Schönes Wochenende!
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
thowe
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste