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

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

这是我的代码:

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

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

572216 次浏览

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

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

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

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

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

字符串周围的双引号中的所有双引号都必须改为双引号。例如,我有一个 json 文件字符串: “ Deliver”: “ Standard”, 在 Vba 编辑器中,我将它改为“”“交付”“”“标准”“”,一切工作正常。如果要插入很多类似的字符串,我建议先将它们全部插入到“”之间,然后用 VBA 编辑器替换“内进”。如果您将做错误,VBA 编辑器显示这一行红色,您将更正这一错误。

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

我已经写了一个小例程,其中复制公式从单元格到剪贴板,可以很容易地粘贴在 VisualBasic 编辑器。

    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 论坛的 地下室部分。

如果 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