Como faço para colocar aspas duplas em uma string em vba?

116

Quero inserir uma instrução if em uma célula por meio de vba que inclui aspas duplas.

Aqui está o meu código:

Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!B1=0,"",Sheet1!B1)"

Devido a aspas duplas, estou tendo problemas para inserir a string. Como faço para lidar com aspas duplas?

user793468
fonte
Não é uma resposta direta, mas você tem certeza sobre essa string? É uma referência circular e não começa com um sinal de igual.
JimmyPena
@JimmyPena Acho que provavelmente é apenas um código de exemplo. Estou enviando uma edição, independentemente
Farfromunique

Respostas:

182

Acho que a maneira mais fácil é dobrar as cotações para lidar com uma cotação.

Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0,"""",Sheet1!A1)" 

Algumas pessoas gostam de usar CHR (34) *:

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

* Nota: CHAR () é usado como uma fórmula de célula do Excel, por exemplo, escrevendo "= CHAR (34)" em uma célula, mas para o código VBA você usa a função CHR ().

Brain2000
fonte
28
Eu prefiro criar uma variável global: Public Const vbDoubleQuote As String = "" "" 'representa 1 aspa dupla (") Public Const vbSingleQuote As String ="' "'representa 1 aspa simples (') e usando-o assim: Shell" explorer.exe "& vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus
gicalle
A resposta de @gicalle é muito legal, leva toda a confusão de 'quantas aspas simples e duplas' para uma definição onde pode ser documentada
rolinger
1
Eu uso muita define globais em todos os meus projetos VBA (quando eu não tenho uma escolha em usar algo diferente do VBA !!) que definem todas as coisas comuns, como retorno de carro, aspas duplas etc.
rolos
11

Outra solução alternativa é construir uma string com um caractere substituto temporário. Em seguida, você pode usar REPLACE para alterar cada caractere temporário para aspas duplas. Eu uso til como o caractere substituto temporário.

Aqui está um exemplo de um projeto em que estou trabalhando. Esta é uma pequena rotina de utilidade para reparar uma fórmula muito complicada se / quando a célula for pisada acidentalmente. É uma fórmula difícil de entrar em uma célula, mas esse pequeno utilitário a corrige instantaneamente.

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

Este é realmente apenas um truque de programação simples, mas torna muito fácil inserir a fórmula em seu código VBA.

D Zeller
fonte
8

Todas as aspas duplas dentro das aspas que circundam a string devem ser alteradas para o dobro. Como exemplo, tive uma das strings de arquivo json: "entrega": "Padrão", No Editor Vba mudei para "" "entrega" ":" "Padrão" "," e tudo funciona corretamente. Se você tiver que inserir muitas strings semelhantes, minha proposta primeiro, insira-as todas entre "", em seguida, com o editor VBA substitua "dentro de" ". Se você cometer um erro, o editor VBA mostra esta linha em vermelho e você corrigirá esse erro.

Sharunas Bielskis
fonte
5

Prefiro a resposta da tabSF. implementando o mesmo em sua resposta. aqui abaixo está minha abordagem

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

Eu escrevi uma pequena rotina que copia a fórmula de uma célula para a área de transferência, que pode ser facilmente colada no Editor do 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

Foi postado originalmente na seção Vault dos fóruns Chandoo.org .

shrivallabha.redij
fonte