如何在vba中的字符串中加上双引号?


116

我想通过包含双引号的vba在单元格中插入if语句。

这是我的代码:

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

由于双引号,我在插入字符串时遇到问题。如何处理双引号?


不是直接的答案,但是您确定该字符串吗?这是一个循环引用,并非以等号开头。
JimmyPena 2012年

@JimmyPena我认为那可能只是示例代码。
无论如何

Answers:


182

我发现最简单的方法是加倍引用以处理报价。

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

有些人喜欢使用CHR(34)*:

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

*注意:CHAR()用作Excel单元格公式,例如,在单元格中写入“ = CHAR(34)”,但对于VBA代码,请使用CHR()函数。


28
我更喜欢创建一个全局变量:Public Const vbDoubleQuote As String =“”“”'代表1双引号(“)Public Const vbSingleQuote As String =”'“'代表1单引号(')并像这样使用它:Shell” explorer.exe“&vbDoubleQuote和sPath&vbDoubleQuote,vbNormalFocus
gicalle 2014年

@gicalle的回答确实很整洁,它将“多少个单引号和双引号”的所有混淆带到了一个可以记录的定义上
rolinger 2016年

1
我使用大量在我所有的VBA项目的全球定义(当我没有使用VBA比其他东西的选择!!),定义像回车所有常用的东西,双引号等

11

另一个解决方法是构造一个带有临时替换字符的字符串。然后,您可以使用REPLACE将每个临时字符更改为双引号。我将波浪号用作临时替代字符。

这是我一直在从事的项目的示例。如果/当细胞意外踩踏时,这是一个实用程序,可以修复非常复杂的公式。进入单元格很难,但是这个小工具可以立即修复它。

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

这实际上只是一个简单的编程技巧,但是它使在VBA代码中输入公式变得非常容易。


8

包围字符串的双引号内的所有双引号必须更改为双倍。例如,我有一个json文件字符串:“ delivery”:“ Standard”,在Vba Editor中,我将其更改为“”“ delivery”“:”“ Standard”“,”,并且Everythig可以正常工作。如果必须插入很多相似的字符串,我的建议是先将它们全部插入到“”之间,然后使用VBA编辑器将“ inside”替换为“”。这个错误。


5

我更喜欢tabSF的答案。实施相同的答案。这是我的方法

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

4

我编写了一个小的例程,可以将公式从单元格复制到剪贴板,可以轻松地将其粘贴到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

它最初发布在Chandoo.org论坛的Vault部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.