Je souhaite insérer une instruction if dans une cellule via vba, qui inclut des guillemets doubles.
Voici mon code:
Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!B1=0,"",Sheet1!B1)"
En raison de doubles guillemets, je ne parviens pas à insérer la chaîne. Comment gérer les guillemets doubles?
Je trouve que le moyen le plus simple est de doubler les citations pour gérer une citation.
Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0,"""",Sheet1!A1)"
Certaines personnes aiment utiliser CHR (34) *:
Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)"
* Remarque: CHAR () est utilisé comme formule de cellule Excel, par exemple. en écrivant "= CHAR (34)" dans une cellule, mais pour le code VBA, vous utilisez la fonction CHR ().
Une autre solution consiste à construire une chaîne avec un caractère de remplacement temporaire. Ensuite, vous pouvez utiliser REPLACE pour remplacer chaque caractère temporaire par le guillemet double. J'utilise tilde comme caractère de remplacement temporaire.
Voici un exemple d'un projet sur lequel j'ai travaillé. Ceci est une petite routine d’utilité pour réparer une formule très compliquée si/lorsque la cellule est piétinée accidentellement. C'est une formule difficile à entrer dans une cellule, mais ce petit utilitaire le répare instantanément.
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
Il s’agit en réalité d’une simple astuce de programmation, mais il est très facile de saisir la formule dans votre code VBA.
Toutes les doubles guillemets à l'intérieur de doubles guillemets entourant la chaîne doivent être doublés. Comme exemple, j’avais l’une des chaînes de fichiers json: "delivery": "Standard", je l’ai changée en "" "delivery" ":" "Standard" "," et everythig fonctionne correctement. Si vous devez insérer beaucoup de chaînes similaires, ma proposition commence par les insérer toutes entre "", puis avec l'éditeur VBA, remplacez "inside into" ". Si vous faites une erreur, l'éditeur VBA affiche cette ligne en rouge et vous corrigerez cette erreur.
J'ai écrit une petite routine qui copie une formule d'une cellule à une autre dans le presse-papier, que l'on peut facilement coller dans Visual Basic Editor.
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
Il est initialement publié sur la section Vault de forums Chandoo.org.
Je préfère la réponse de tabSF. appliquer la même chose à votre réponse. voici ci-dessous mon approche
Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)"