Как поместить двойные кавычки в строку в vba?
Я хочу вставить оператор if в ячейку через vba, который включает двойные кавычки.
Вот мой код:
Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!B1=0,"",Sheet1!B1)"
Из-за двойных кавычек у меня возникают проблемы с вставкой строки. Как обрабатывать двойные кавычки?
Ответы
Ответ 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().
Ответ 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 Editor я изменил ее на "" "delivery" ":" "Standard" ",", и все работает правильно. Если вам нужно вставить много похожих строк, сначала мое предложение, вставьте их все между "", затем с помощью редактора VBA замените "внутри в" ". Если вы допустите ошибку, редактор VBA покажет эту строку красным цветом, и вы исправите эта ошибка.
Ответ 4
Я предпочитаю ответ tabSF. выполняя то же самое для вашего ответа. здесь ниже мой подход
Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)"
Ответ 5
Я написал небольшую подпрограмму, которая копирует формулу из ячейки в буфер обмена, которую можно легко вставить в редактор 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.
Ответ 6
Функция TEXT может воспроизводить пустую (или нулевую) строку без использования кавычек.
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
Я использую свойство Range.Formula, а не Range. Значение свойства для ясности. Использование .Value, чтобы поместить формулу в ячейку, отформатированную как текст (например, @
), может привести к созданию ячейки, содержащей формулу text-that-look-like-a-formula.