如何在 vba 的字符串中放置双引号?

How do I put double quotes in a string in vba?

提问人:user793468 提问时间:1/27/2012 最后编辑:Andrei Konstantinovuser793468 更新时间:11/1/2022 访问量:613559

问:

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

这是我的代码:

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

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

Excel VBA 双引号

评论

0赞 JimmyPena 1/27/2012
不是直接的答案,但你确定那个字符串吗?它是一个循环引用,不以等号开头。
0赞 Farfromunique 4/8/2017
@JimmyPena我认为这可能只是示例代码。无论如何,我都在提交编辑

答:

239赞 Brain2000 1/27/2012 #1

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

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() 函数。

评论

42赞 gicalle 9/11/2014
我更喜欢创建一个全局变量: Public Const vbDoubleQuote As String = “”“” '表示 1 个双引号 (“) Public Const vbSingleQuote As String = ”'“ '表示 1 个单引号 (') 并像这样使用它: Shell ”explorer.exe“ & vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus
0赞 rolinger 6/2/2016
@gicalle的答案真的很简洁,它将“有多少个单引号和双引号”的所有困惑都归结为一个可以记录的定义
1赞 rollsch 12/14/2016
我在我所有的 VBA 项目中使用了很多全局定义(当我别无选择时,除了 VBA 之外,我!!)定义了所有常见的东西,如回车符、双引号等。
0赞 Dominique 6/22/2023
永远不要用于此:有一家基于 ProgresDB 的公司使用它,每次他们的客户在表中的某个地方使用双引号时,他们的应用程序都无法再运行任何查询 :-)chr(34)
13赞 Sharunas Bielskis 7/19/2016 #2

所有双引号内的双引号(包围字符串)都必须加倍。例如,我有一个json文件字符串:“delivery”: “Standard”, 在 Vba 编辑器中,我将其更改为 “”“delivery”“: ”“Standard”“,”并且每个 Model“都可以正常工作。如果您必须插入很多类似的字符串,我的建议首先将它们全部插入“”之间,然后使用VBA编辑器将“inside”替换为“”。如果您犯了错误,VBA编辑器会以红色显示此行,您将更正此错误。

18赞 D Zeller 2/25/2017 #3

另一种解决方法是构造一个带有临时替换字符的字符串。然后,您可以使用 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代码中输入公式变得非常容易。

6赞 shrivallabha.redij 10/20/2017 #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 论坛的保险库部分。

3赞 Greedo #5

如果 gicalle 的评论死了:

我更喜欢创建一个全局变量:

Public Const vbDoubleQuote As String = """" 'represents 1 double quote (")
Public Const vbSingleQuote As String = "'" 'represents 1 single quote (') 

并像这样使用它:

Shell "explorer.exe " & vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus