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

Quiero insert una instrucció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 insert la cadena. ¿Cómo manejo las comillas dobles?

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

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

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

Todas las comillas dobles dentro de las comillas dobles que rodean la cadena deben cambiarse al doble. Como ejemplo, tuve una de las cadenas de files json: "entrega": "Estándar", en Vba Editor lo cambié a "" "entrega" ":" "Estándar" "," y todo funciona correctamente. Si tiene que insert muchas cadenas similares, primero mi propuesta, inserte todas ellas entre "", luego con el editor VBA, reemplace "inside into" ". Si comete un error, el editor VBA mostrará esta línea en rojo y usted corregirá este error.

Otro trabajo alternativo es build una cadena con un carácter sustituto temporal. Luego puede usar REEMPLAZAR para cambiar cada caracter temporal a la comilla doble. 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 celda es pisoteada accidentalmente. Es una fórmula difícil para ingresar a una célula, pero esta pequeña utilidad lo soluciona 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 

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

He escrito una pequeña rutina que copy 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 requinetworking 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 de bóveda de los foros de Chandoo.org.

La function TEXTO puede reproducir una cadena vacía (o de longitud cero) sin usar comillas.

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

He usado la propiedad Range.Formula en lugar de la propiedad Range.Value para mayor claridad. El uso de .Value para poner una fórmula en una celda formateada como text (por ejemplo, @ ) puede dar como resultado una celda que contenga text-that-looks-like-a-formula.