如何在vba中的字符串中添加双引号?
Posted
技术标签:
【中文标题】如何在vba中的字符串中添加双引号?【英文标题】:How do I put double quotes in a string in vba? 【发布时间】:2012-01-26 20:18:31 【问题描述】:我想通过包含双引号的 vba 在单元格中插入一条 if 语句。
这是我的代码:
Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!B1=0,"",Sheet1!B1)"
由于双引号,我在插入字符串时遇到问题。如何处理双引号?
【问题讨论】:
不是直接答案,但您确定该字符串吗?这是一个循环引用,不以等号开头。 @JimmyPena 我认为这可能只是示例代码。我正在提交编辑,不管 【参考方案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() 函数。
【讨论】:
我更喜欢创建一个全局变量: Public Const vbDoubleQuote As String = """" '表示1个双引号(") Public Const vbSingleQuote As String = "'" '表示1个单引号(')并像这样使用它:Shell "explorer.exe " & vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus @gicalle 的回答非常简洁,它将“有多少单引号和双引号”的所有混淆都归结为一个可以记录的定义 我在我的所有 VBA 项目中使用了很多全局定义(当我没有选择使用 VBA 以外的东西时!!)定义了所有常见的东西,如回车、双引号等.【参考方案2】:另一种解决方法是构造一个带有临时替换字符的字符串。然后您可以使用 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 代码中输入公式变得非常容易。
【讨论】:
【参考方案3】:字符串周围的双引号内的所有双引号必须更改为双引号。例如,我有一个 json 文件字符串:“delivery”:“Standard”, 在 Vba 编辑器中,我将其更改为 """delivery"": ""Standard""",并且一切正常。如果你要插入很多类似的字符串,我的建议是先把它们都插入到 "" 之间,然后用 VBA 编辑器把里面的 " 替换成 ""。如果你做错了,VBA 编辑器会用红色显示这一行,你会更正这个错误。
【讨论】:
【参考方案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 部分。
【讨论】:
以上是关于如何在vba中的字符串中添加双引号?的主要内容,如果未能解决你的问题,请参考以下文章
VBA中字符变量双引号如何去除?我的变量赋值使用时因为是字符变量自带了双引号导致赋值后无法识别