Як покласти подвійні лапки в рядок у vba?


116

Я хочу вставити оператор if у комірку через vba, що включає подвійні лапки.

Ось мій код:

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

Через подвійні лапки у мене виникають проблеми із вставкою рядка. Як обробляти подвійні лапки?


Не пряма відповідь, але ви впевнені в цьому рядку? Це круговий довідник і не починається зі знаку рівності.
JimmyPena

@JimmyPena Я думаю, що це, мабуть, лише приклад коду. Я надсилаю правки незалежно
Farfromunique

Відповіді:


182

Я вважаю, що найпростішим способом є подвоєння пропозицій для обробки цитати.

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 ().


28
Я вважаю за краще створити глобальну змінну: Public Const vbDoubleQuote As String = "" "" 'являє собою 1 подвійну цитату (") Public Const vbSingleQuote As String ="' "'являє собою 1 єдину цитату (') і використовую її так: Shell" explorer.exe "& vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus
gicalle

Відповідь @ICALle дійсно акуратна, вона займає всю плутанину "скільки однозначних і подвійних лапок" з одним визначенням, де це може бути задокументоване
rolinger

1
Я використовую багато глобальних визначає в усіх моїх проектів VBA (коли у мене немає вибору у використанні щось інше , ніж VBA !!) , які визначають все загальні речі , як повернення каретки, подвійні лапки і т.д.
валками

11

Інша обробка полягає в тому, щоб побудувати рядок з тимчасовим символом підстановки. Тоді ви можете використовувати ЗАМІНУ, щоб змінити кожен тимчасовий символ на подвійну лапочку. Я використовую тильду як характер тимчасового замінника.

Ось приклад проекту, над яким я працював. Це невелика корисна програма для відновлення дуже складної формули, якщо / коли клітина потрапила випадково. Це складна формула ввести до комірки, але ця маленька утиліта виправляє її миттєво.

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 досить простим.


8

Усі подвійні лапки всередині подвійних лапок, які є навколо рядка, слід змінити вдвічі. Як приклад, я мав один із рядків файлу json: "delivery": "Standard", в редакторі Vba я змінив його на "" "Delivery" ":" "Standard" ",", і кожне працює правильно. Якщо вам доведеться вставити багато подібних рядків, спершу моя пропозиція вставити їх між "", потім за допомогою редактора VBA замініть "всередину на". Якщо ви помилитесь, редактор VBA покаже цей рядок червоним кольором, і ви виправите ця помилка.


5

Я віддаю перевагу відповіді tabSF. реалізуючи те саме на свою відповідь. ось нижче - мій підхід

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

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 секції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.