如何在VBA中的string中加双引号?
我想通过包含双引号的vba在单元格中插入if语句。
这是我的代码:
Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!B1=0,"",Sheet1!B1)"
由于双引号我有插入string的问题。 我如何处理双引号?
我发现最简单的方法是在报价上加倍处理报价。
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)”,但对于使用CHR()函数的VBA代码。
我更喜欢tabSF的答案。 执行相同的答案。 下面是我的方法
Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)"
另一个解决方法是用临时替代字符构造一个string。 然后,您可以使用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代码中input公式非常简单。
双引号内的所有双引号必须在string前面加倍改变。 例如我有一个json文件string:“delivery”:“Standard”,在VBA编辑器中,我将其更改为“”“delivery”“:”“Standard”“”,并且everythig正常工作。 如果你不得不插入很多类似的string,我的提议首先插入它们之间的所有“”,然后用VBA编辑器replace“里面到”“如果你会犯错误,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论坛的保险库部分。
TEXT函数可以在不使用引号的情况下重现一个空(或零长度)的string。
with Worksheets("Sheet1").Range("A2") .formula = "=IF(Sheet1!A1=0, TEXT(,), Sheet1!A1)" 'also good for comparing to a zero-length string; eg IF(A1="", ... .formula = "=IF(Sheet1!A1=TEXT(,), TEXT(,), Sheet1!A1)" end with
为了清晰起见,我使用了Range.Formula属性而不是Range.Value属性 。 使用.Value将公式放入格式为文本的单元格(例如@
)可能会导致包含文本看起来像一个公式的单元格。