web-dev-qa-db-fra.com

Comment mettre des guillemets doubles dans une chaîne dans vba?

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?

99
user793468

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

156
Brain2000

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.

7
D Zeller

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.

6
Sharunas Bielskis

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.

3
shrivallabha.redij

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)"
3
Jobin Lopez