¿Cómo pongo comillas dobles en una cadena en vba?

116

Quiero insertar una declaración if en una celda a través de vba que incluye comillas dobles.

Aquí está mi código:

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

Debido a las comillas dobles, tengo problemas para insertar la cadena. ¿Cómo manejo las comillas dobles?

user793468
fuente
No es una respuesta directa, pero ¿estás seguro de esa cadena? Es una referencia circular y no comienza con un signo igual.
JimmyPena
@JimmyPena Creo que probablemente sea solo un código de ejemplo. Estoy enviando una edición, independientemente
Farfromunique

Respuestas:

182

Encuentro que la forma más fácil es duplicar las cotizaciones para manejar una cotización.

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

A algunas personas les gusta usar CHR (34) *:

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

* Nota: CHAR () se usa como una fórmula de celda de Excel, por ejemplo, escribiendo "= CHAR (34)" en una celda, pero para el código VBA se usa la función CHR ().

Cerebro2000
fuente
28
Prefiero crear una variable global: Public Const vbDoubleQuote As String = "" "" 'representa 1 comilla doble (") Public Const vbSingleQuote As String ="' "'representa 1 comilla simple (') y usarlo así: Shell" explorer.exe "& vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus
gicalle
La respuesta de @gicalle es realmente ordenada, se necesita toda la confusión de 'cuántas comillas simples y dobles' en una definición donde se puede documentar
rolinger
1
Yo uso un montón de define globales en todos mis proyectos de VBA (cuando no tengo una opción en el uso de algo que no sea VBA !!) que definen todas las cosas comunes como el retorno de carro, etc. comillas dobles
rollos
11

Otra solución es construir una cadena con un carácter sustituto temporal. Luego puede usar REPLACE para cambiar cada carácter temporal a comillas dobles. Utilizo tilde como carácter sustituto temporal.

Aquí hay un ejemplo de un proyecto en el que he estado trabajando. Esta es una pequeña rutina de utilidad para reparar una fórmula muy complicada si / cuando la celda se pisa accidentalmente. Es una fórmula difícil de ingresar en una celda, pero esta pequeña utilidad la arregla instantáneamente.

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

En realidad, esto es solo un truco de programación simple, pero hace que ingresar la fórmula en su código VBA sea bastante fácil.

D Zeller
fuente
8

Todas las comillas dobles dentro de comillas dobles que rodean la cadena deben cambiarse al doble. Como ejemplo, tuve una de las cadenas de archivos json: "entrega": "Estándar", en Vba Editor lo cambié a "" "entrega" ":" "Estándar" "," y todo funciona correctamente. Si tiene que insertar muchas cadenas similares, mi propuesta primero, insértelas todas entre "", luego con el editor de VBA reemplace "dentro de" ". Si se equivoca, el editor de VBA muestra esta línea en rojo y usted corregirá este error.

Sharunas Bielskis
fuente
5

Prefiero la respuesta de tabSF. implementando lo mismo en su respuesta. aquí abajo está mi enfoque

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

He escrito una pequeña rutina que copia la fórmula de una celda al portapapeles que se puede pegar fácilmente en el Editor de Visual Basic.

    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

Se publicó originalmente en la sección Vault de los foros de Chandoo.org .

shrivallabha.redij
fuente