Как поместить двойные кавычки в строку в vba?
Я хочу вставить оператор if в ячейку через vba, которая включает двойные кавычки.
вот мой код:
Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!B1=0,"",Sheet1!B1)"
из-за двойных кавычек у меня возникли проблемы с вставкой строки. Как я могу обрабатывать двойные кавычки?
6 ответов:
Я считаю, что самый простой способ-удвоить котировки для обработки цитаты.
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 ().
другой обходной путь состоит в том, чтобы построить строку с временным символом замены. Затем вы можете использовать REPLACE, чтобы изменить каждый символ temp на двойную кавычку. Я использую Тильду как временный символ замены.
вот пример из проекта, над которым я работал. Это небольшая утилита для восстановления очень сложной формулы, если / когда клетка случайно наступила на нее. Это сложная формула для ввода в ячейку, но эта небольшая утилита исправляет это мгновенно.
Sub RepairFormula() Dim FormulaString As String FormulaString = "=MID(CELL(~filename~,$A),FIND(~[~,CELL(~filename~,$A))+1,FIND(~]~, CELL(~filename~,$A))-FIND(~[~,CELL(~filename~,$A))-1)" FormulaString = Replace(FormulaString, Chr(126), Chr(34)) 'this replaces every instance of the tilde with a double quote. Range("WorkbookFileName").Formula = FormulaString
это действительно просто простой трюк программирования, но это делает ввод формулы в коде VBA довольно легко.
все двойные кавычки внутри двойных кавычек, которые окружают строку, должны быть изменены в два раза. В качестве примера у меня была одна из строк файла json: "delivery": "Standard", В Редакторе Vba я изменил его на """delivery"":"" Standard"", " и everythig работает правильно. Если вам нужно вставить много подобных строк, мое предложение сначала вставить их все Между "", а затем с помощью редактора VBA заменить " внутри "на"". Если вы сделаете ошибку, редактор VBA покажет эту строку красным цветом, и вы исправите это ошибка.
Я предпочитаю ответ tabSF . реализуя то же самое к вашему ответу. вот ниже мой подход
Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)"
Я написал небольшую процедуру, которая копирует формулу из ячейки в буфер обмена, который можно легко вставить в редактор 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.
The текст можно воспроизвести пустую (или нулевой длины) строку без использования кавычек.
with Worksheets("Sheet1").Range("A2") .formula = "=IF(Sheet1!A1=0, TEXT(,), Sheet1!A1)" 'also good for comparing to a zero-length string; e.g. IF(A1="", ... .formula = "=IF(Sheet1!A1=TEXT(,), TEXT(,), Sheet1!A1)" end with
Я использую