2012-01-26 47 views
68

Quiero insertar una instrucción if en una celda a través de vba, que incluye comillas dobles.¿Cómo pongo comillas dobles en una cadena en vba?

Aquí está mi código:

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

Debido a las comillas dobles que estoy teniendo problemas con la inserción de la cadena. ¿Cómo manejo las comillas dobles?

+0

No es una respuesta directa, pero ¿está seguro de esa cadena? Es una referencia circular y no comienza con un signo igual. – JimmyPena

+0

@JimmyPena Creo que probablemente sea solo un código de ejemplo.Estoy enviando una edición, independientemente de – Farfromunique

Respuesta

103

Me parece que la manera más fácil es duplicar las cotizaciones para manejar una cotización.

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

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 utiliza como una fórmula de celda Excel, por ejemplo, escribiendo "= CHAR (34)" en una celda, pero para el código VBA usa la función CHR().

+11

Prefiero crear una variable global: Public Const vbDoubleQuote As String = "" "" 'representa 1 comilla doble (") Public Const vbSingleQuote As String ="' "'representa 1 comilla simple (') y utilizándolo como sigue: Shell "explorer.exe" & vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus – gicalle

+0

La respuesta de @gicalle es muy clara, se necesita toda la confusión de "cuántas comillas simples y dobles" a una definición donde se puede documentar – rolinger

+0

Utilizo muchas definiciones globales en todos mis proyectos de VBA (¡cuando no tengo otra opción para usar algo que no sea VBA!) que definen todos los elementos comunes como retorno de carro, doble citas, etc. – rolls

1

Prefiero la respuesta de tabSF. implementando lo mismo a tu respuesta. aquí abajo es mi enfoque

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

El TEXT function puede reproducir una cadena vacía (o de longitud cero) sin utilizar comillas.

with Worksheets("Sheet1").Range("A2") 
    .formula = "=IF(Sheet1!A1=0, TEXT(,), Sheet1!A1)" 
    'also good for comparing to a zero-length string; e.g. IF(A1="", ... 
    .formula = "=IF(Sheet1!A1=TEXT(,), TEXT(,), Sheet1!A1)" 
end with 

He usar el Range.Formula property en lugar de Range.Value property para mayor claridad. El uso de .Value para poner una fórmula en una celda formateada como texto (por ejemplo, @) puede generar una celda que contenga text-that-looks-like-a-formula.

1

Todas las comillas dobles dentro de las comillas dobles que rodean la cadena se deben cambiar 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, primero mi propuesta, inserte todas ellas entre "", luego con el editor VBA, reemplace "inside into" ". Si comete un error, el editor de VBA mostrará esta línea en rojo y usted corregirá este error.

2

Otra solución alternativa es construir una cadena con un carácter sustituto temporal. a continuación, puede utilizar REPLACE para cambiar cada carácter temporal a la doble cotización. yo uso tilde como el personaje 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 célula se pisa accidentalmente. Es una fórmula difícil para ingresar a una celda, pero esta pequeña utilidad lo arregla al instante.

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 

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

0

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 Chandoo.org foros Vault Sección.

Cuestiones relacionadas