Wie setze ich in vba doppelte Anführungszeichen in eine Zeichenfolge?

116

Ich möchte eine if-Anweisung über vba in eine Zelle einfügen, die doppelte Anführungszeichen enthält.

Hier ist mein Code:

Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!B1=0,"",Sheet1!B1)"

Aufgrund von doppelten Anführungszeichen habe ich Probleme beim Einfügen der Zeichenfolge. Wie gehe ich mit doppelten Anführungszeichen um?

user793468
quelle
Keine direkte Antwort, aber sind Sie sich über diese Zeichenfolge sicher? Es ist eine Zirkelreferenz und beginnt nicht mit einem Gleichheitszeichen.
JimmyPena
@ JimmyPena Ich denke, das ist wahrscheinlich nur Beispielcode. Ich
reiche

Antworten:

182

Ich finde, der einfachste Weg ist, die Anführungszeichen zu verdoppeln, um ein Angebot zu bearbeiten.

Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0,"""",Sheet1!A1)" 

Einige Leute benutzen gerne CHR (34) *:

Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)" 

* Hinweis: CHAR () wird als Excel-Zellenformel verwendet, z. B. Schreiben von "= CHAR (34)" in eine Zelle. Für VBA-Code verwenden Sie jedoch die Funktion CHR ().

Brain2000
quelle
28
Ich bevorzuge das Erstellen einer globalen Variablen: Public Const vbDoubleQuote As String = "" "" 'steht für 1 doppeltes Anführungszeichen (") Public Const vbSingleQuote As String ="' "'steht für 1 einfaches Anführungszeichen (') und verwendet es wie folgt: Shell" explorer.exe "& vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus
gicalle
Die Antwort von @gicalle ist wirklich ordentlich. Sie führt die Verwirrung darüber, wie viele einfache und doppelte Anführungszeichen es gibt, zu einer Definition, in der sie dokumentiert werden kann
Rolinger
1
Ich verwende in allen meinen VBA-Projekten viele globale Definitionen (wenn ich keine andere Wahl habe als VBA !!), die alle gängigen Dinge wie Wagenrücklauf, doppelte Anführungszeichen usw. definieren
rollt
11

Eine andere Problemumgehung besteht darin, eine Zeichenfolge mit einem temporären Ersatzzeichen zu erstellen. Anschließend können Sie mit REPLACE jedes temporäre Zeichen in ein doppeltes Anführungszeichen ändern. Ich benutze Tilde als temporären Ersatzcharakter.

Hier ist ein Beispiel aus einem Projekt, an dem ich gearbeitet habe. Dies ist eine kleine Dienstprogrammroutine, um eine sehr komplizierte Formel zu reparieren, wenn / wenn die Zelle versehentlich betreten wird. Es ist eine schwierige Formel, in eine Zelle einzutreten, aber dieses kleine Dienstprogramm behebt sie sofort.

Sub RepairFormula()
Dim FormulaString As String

FormulaString = "=MID(CELL(~filename~,$A$1),FIND(~[~,CELL(~filename~,$A$1))+1,FIND(~]~, CELL(~filename~,$A$1))-FIND(~[~,CELL(~filename~,$A$1))-1)"
FormulaString = Replace(FormulaString, Chr(126), Chr(34)) 'this replaces every instance of the tilde with a double quote.
Range("WorkbookFileName").Formula = FormulaString

Dies ist eigentlich nur ein einfacher Programmiertrick, aber es macht die Eingabe der Formel in Ihren VBA-Code ziemlich einfach.

D Zeller
quelle
8

Alle doppelten Anführungszeichen in doppelten Anführungszeichen, die die Zeichenfolge umgeben, müssen doppelt geändert werden. Als Beispiel hatte ich eine der JSON-Datei-Zeichenfolgen: "Lieferung": "Standard". Im Vba-Editor habe ich sie in "" Lieferung "": "" Standard "" geändert und alles funktioniert korrekt. Wenn Sie viele ähnliche Zeichenfolgen einfügen müssen, mein Vorschlag zuerst, fügen Sie sie alle zwischen "" ein und ersetzen Sie dann mit dem VBA-Editor "inside in" ". Wenn Sie einen Fehler machen, zeigt der VBA-Editor diese Zeile in rot an und Sie korrigieren dieser Fehler.

Sharunas Bielskis
quelle
5

Ich bevorzuge die Antwort von tabSF. Implementieren Sie das gleiche auf Ihre Antwort. Hier unten ist mein Ansatz

Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)"
Jobin Lopez
quelle
4

Ich habe eine kleine Routine geschrieben, die Formeln aus einer Zelle in die Zwischenablage kopiert, die man einfach in Visual Basic Editor einfügen kann.

    Public Sub CopyExcelFormulaInVBAFormat()
        Dim strFormula As String
        Dim objDataObj As Object

        '\Check that single cell is selected!
       If Selection.Cells.Count > 1 Then
            MsgBox "Select single cell only!", vbCritical
            Exit Sub
        End If

        'Check if we are not on a blank cell!
       If Len(ActiveCell.Formula) = 0 Then
            MsgBox "No Formula To Copy!", vbCritical
            Exit Sub
        End If

        'Add quotes as required in VBE
       strFormula = Chr(34) & Replace(ActiveCell.Formula, Chr(34), Chr(34) & Chr(34)) & Chr(34)

        'This is ClsID of MSFORMS Data Object
       Set objDataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        objDataObj.SetText strFormula, 1
        objDataObj.PutInClipboard
        MsgBox "VBA Format formula copied to Clipboard!", vbInformation

        Set objDataObj = Nothing

    End Sub

Es wurde ursprünglich in der Vault- Sektion der Chandoo.org-Foren veröffentlicht .

shrivallabha.redij
quelle