Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何在vba中将双引号放在字符串中?_Excel_Vba_Double Quotes - Fatal编程技术网

Excel 如何在vba中将双引号放在字符串中?

Excel 如何在vba中将双引号放在字符串中?,excel,vba,double-quotes,Excel,Vba,Double Quotes,我想通过包含双引号的vba在单元格中插入if语句 这是我的密码: Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!B1=0,"",Sheet1!B1)" 由于双引号,我在插入字符串时遇到问题。如何处理双引号?我发现最简单的方法是将引号加倍以处理引号 Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0,"""",Sheet1!A1)" 有些人喜欢使用CHR(34)*:

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

这是我的密码:

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

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

我发现最简单的方法是将引号加倍以处理引号

Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0,"""",Sheet1!A1)" 
有些人喜欢使用CHR(34)*:


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

环绕字符串的双引号中的所有双引号必须更改为双引号。例如,我有一个json文件字符串:“delivery”:“Standard”,
在Vba编辑器中,我将其更改为“交付”:“标准”,并且所有工具都正常工作。如果您必须插入许多类似的字符串,我的建议是,首先在“”之间插入所有字符串,然后用VBA编辑器替换“inside-into”“。如果您会出错,VBA编辑器将此行显示为红色,您将更正此错误。

另一个解决方法是使用临时替换字符构造字符串。然后可以使用REPLACE将每个临时字符更改为双引号。我使用tilde作为临时替换字符

下面是我一直在做的一个项目的一个例子。这是一个小实用程序,用于在细胞意外被踩到时修复非常复杂的公式。这是一个很难进入一个细胞的公式,但这个小实用程序立即修复它

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代码中输入公式变得非常简单。

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

不是直接的答案,但你确定这个字符串吗?这是一个循环引用,不是以等号开头的。@JimmyPena我想这可能只是示例代码。我正在提交一个编辑,Regardles我更喜欢创建一个全局变量:Public Const vbDoubleQuote As String=“””表示1个双引号(“)Public Const vbSingleQuote As String=“””””表示1个单引号(”),并像这样使用:Shell“explorer.exe“&vbDoubleQuote&sPath&vbDoubleQuote,vbNormalFocus@gicalle的答案非常简洁,它将“多少个单引号和双引号”这一混淆带到了一个定义中,可以在其中进行记录。我在所有VBA项目中使用了大量全局定义(当我没有选择使用VBA以外的东西时!!)它定义了所有常见的东西,如回车、双引号等。
    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