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.