poner entre dobles dentro concatenar como comillas cadena excel-vba double-quotes

excel-vba - dobles - vba comillas entre comillas



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

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 función CHR ().

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


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 de Vault los foros de Chandoo.org.


La función 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; e.g. 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 texto (por ejemplo, @ ) puede dar como resultado una celda que contenga text-that-looks-like-a-formula.


Otro trabajo alternativo es construir 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 programación, pero hace que ingresar la fórmula en tu código VBA sea bastante fácil.


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 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.