Come inserisco le virgolette doppie in una stringa in vba?


116

Voglio inserire un'istruzione if in una cella tramite vba che include virgolette doppie.

Ecco il mio codice:

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

A causa delle virgolette doppie ho problemi con l'inserimento della stringa. Come si gestiscono le virgolette doppie?


Non una risposta diretta, ma sei sicuro di quella stringa? È un riferimento circolare e non inizia con un segno di uguale.
JimmyPena

@ JimmyPena Penso che probabilmente sia solo un esempio di codice. Sto inviando una modifica, a prescindere
Farfromunique

Risposte:


182

Trovo che il modo più semplice sia raddoppiare le virgolette per gestire una citazione.

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

Ad alcune persone piace usare CHR (34) *:

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

* Nota: CHAR () viene utilizzato come formula di cella di Excel, ad esempio scrivendo "= CHAR (34)" in una cella, ma per il codice VBA si utilizza la funzione CHR ().


28
Preferisco creare una variabile globale: Public Const vbDoubleQuote As String = "" "" 'rappresenta 1 virgoletta doppia (") Public Const vbSingleQuote As String ="' "'rappresenta 1 virgoletta singola (') e usarla in questo modo: Shell" explorer.exe "& vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus
gicalle

La risposta di @gicalle è davvero chiara, porta tutta la confusione di "quante virgolette singole e doppie" a una definizione in cui può essere documentata
rolinger

1
Uso molte definizioni globali in tutti i miei progetti VBA (quando non ho scelta nell'usare qualcosa di diverso da VBA !!) Che definiscono tutte le cose comuni come ritorno a capo, virgolette doppie ecc.
rotoli

11

Un'altra soluzione consiste nel costruire una stringa con un carattere sostitutivo temporaneo. Quindi puoi usare REPLACE per cambiare ogni carattere temporaneo con le virgolette doppie. Uso la tilde come carattere sostitutivo temporaneo.

Ecco un esempio da un progetto su cui sto lavorando. Questa è una piccola routine di utilità per riparare una formula molto complicata se / quando la cella viene calpestata accidentalmente. È una formula difficile da inserire in una cella, ma questa piccola utilità la risolve all'istante.

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

Questo è davvero solo un semplice trucco di programmazione, ma rende abbastanza facile l'inserimento della formula nel codice VBA.


8

Tutte le virgolette doppie all'interno di virgolette doppie che circondano la stringa devono essere cambiate raddoppiate. Come esempio ho avuto una delle stringhe di file json: "delivery": "Standard", In Vba Editor l'ho cambiata in "" "delivery" ":" "Standard" "," e tutto funziona correttamente. Se devi inserire molte stringhe simili, prima la mia proposta, inseriscile tutte tra "", quindi con l'editor VBA sostituisci "dentro" ". Se sbagli, l'editor VBA mostra questa riga in rosso e tu correggerai questo errore.


5

Preferisco la risposta di tabSF. implementando lo stesso alla tua risposta. qui sotto è il mio approccio

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

4

Ho scritto una piccola routine che copia la formula da una cella agli appunti che si può facilmente incollare in Visual Basic Editor.

    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

È stato originariamente pubblicato nella sezione Vault dei forum di Chandoo.org .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.