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