Excel vba двойные кавычки

Двойные кавычки и кавычки «ёлочки» в коде VBA Excel. Коды символов кавычек и ввод кавычек «ёлочек» в редакторе VBA Excel с клавиатуры. Примеры.

Двойные кавычки

Двойные прямые кавычки ("Весна") обычно называют просто «двойные кавычки» или «прямые кавычки», так как в текстах они встречаются намного чаще одинарных прямых кавычек ('Весна').

В VBA Excel прямые кавычки являются специальными символами, обозначающими текст:

x = «Магазин Весна открыт»

Переменной x присваивается строка (текст): Магазин Весна открыт.

Если мы хотим отобразить эту строку со словом "Весна" в двойных кавычках, необходимо слово в прямых кавычках экранировать еще одной парой двойных кавычек (""Весна"") или использовать функцию Chr, возвращающую символ по его числовому коду. Числовой код прямых кавычек — 34.

Пример добавления двойных прямых кавычек внутри текста из кода VBA Excel:

Sub Primer1()

Dim x As String

    x = «Магазин ««Весна»» открыт»

    Debug.Print x  ‘Магазин «Весна» открыт

    x = «Магазин « & Chr(34) & «Весна» & Chr(34) & » открыт»

    Debug.Print x  ‘Магазин «Весна» открыт

End Sub

Кавычки «ёлочки»

Двойные кавычки «ёлочки» обычно называют просто кавычки «ёлочки», так как одинарные ‹ёлочки› встречаются очень редко.

Двойные кавычки «ёлочки» не являются спецсимволами, поэтому в строках внутри процедур VBA Excel их можно использовать не только через функцию Chr по числовому коду символа, но и ввести с клавиатуры.

Ввод «ёлочек» с клавиатуры в редакторе VBA Excel осуществляется также с помощью числовых кодов символов открывающей и закрывающей кавычек:

  • числовой код открывающей кавычки («) — 171;
  • числовой код закрывающей кавычки (») — 187.

Сочетания клавиш для ввода «ёлочек» с клавиатуры:

  • Alt+0171 — ввод открывающей кавычки («);
  • Alt+0187 — ввод закрывающей кавычки (»).

Обратите внимание, что для ввода «ёлочек» с клавиатуры используется левая клавиша Alt, а числовой код набирается на цифровом блоке справа.

Пример добавления двойных кавычек «ёлочки» внутри текста из кода VBA Excel:

Sub Primer2()

Dim x As String

    x = «Магазин «Весна» открыт»

    Debug.Print x  ‘Магазин «Весна» открыт

    x = «Магазин « & Chr(171) & «Весна» & Chr(187) & » открыт»

    Debug.Print x  ‘Магазин «Весна» открыт

End Sub


Чтобы в строку VBA записать символ кавычек, приходится использовать код символа кавычек Chr(34) или дублировать символ кавычек. В итоге получается громоздкий код вида

'запись формулы в ячейку Excel
c.FormulaLocal = "=ГИПЕРССЫЛКА(""[C:Книга.xls]"")"
'или
c.FormulaLocal="=ГИПЕРССЫЛКА(" & Chr(34) & "[C:w.xls]" & Chr(34) & ")"

Для заключения строк в кавычки можно использовать функцию

'заключает текст в двойные кавычки (способ 1)
Public Function Quotes(text As String) As String
  Quotes = Chr(34) & text & Chr(34)
End Function
'заключает текст в двойные кавычки (способ 2)
Public Function Quotes(text As String) As String
  Quotes = """" & text & """"
End Function
...
c.FormulaLocal = "=ГИПЕРССЫЛКА(" & Quotes("[C:Книга.xls]") & ")"

Запись опубликована в рубрике программирование с метками VBA. Добавьте в закладки постоянную ссылку.

#excel #vba

#excel #vba #двойные кавычки

Вопрос:

Я хочу вставить оператор if в ячейку через vba, который включает двойные кавычки.

Вот мой код:

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

Из-за двойных кавычек у меня возникают проблемы с вставкой строки. Как мне обрабатывать двойные кавычки?

Комментарии:

1. Не прямой ответ, но вы уверены в этой строке? Это циклическая ссылка, которая не начинается со знака равенства.

2. @JimmyPena Я думаю, что это, вероятно, просто пример кода. Я отправляю редактирование, независимо от

Ответ №1:

Я считаю, что самый простой способ — удвоить кавычки для обработки цитаты.

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

Некоторым людям нравится использовать CHR(34)*:

 Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0," amp; CHR(34) amp; CHR(34) amp; ",Sheet1!A1)" 
 

* Примечание: CHAR() используется как формула ячейки Excel, например, запись «= CHAR(34)» в ячейке, но для кода VBA вы используете функцию CHR() .

Комментарии:

1. Я предпочитаю создавать глобальную переменную: Public Const vbDoubleQuote Как String = «»»» ‘представляет 1 двойную кавычку («) Public Const vbSingleQuote Как String = «»» ‘представляет 1 одинарную кавычку (‘) и использовать ее следующим образом: Shell «explorer.exe » amp; vbDoubleQuote amp; sPath amp; vbDoubleQuote, vbNormalFocus

2. ответ @gicalle действительно аккуратный, он сводит всю путаницу «сколько одинарных и двойных кавычек» к одному определению, где это может быть задокументировано

3. Я использую множество глобальных определений во всех своих проектах 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) amp; Replace(ActiveCell.Formula, Chr(34), Chr(34) amp; Chr(34)) amp; 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 Раздел хранилища форумов.

Заключаем строку VBA в кавычки

Чтобы в строку VBA записать символ кавычек, приходится использовать код символа кавычек Chr(34) или дублировать символ кавычек. В итоге получается громоздкий код вида

‘запись формулы в ячейку Excel

c.FormulaLocal = «=ГИПЕРССЫЛКА(«»[C:Книга.xls]»»)»

‘или

c.FormulaLocal=»=ГИПЕРССЫЛКА(» & Chr(34) & «[C:w.xls]» & Chr(34) & «)»

Для заключения строк в кавычки можно использовать функцию

‘заключает текст в двойные кавычки (способ 1)

Public Function Quotes(text As String) As String

Quotes = Chr(34) & text & Chr(34)

End Function

‘заключает текст в двойные кавычки (способ 2)

Public Function Quotes(text As String) As String

Quotes = «»»» & text & «»»»

End Function

c.FormulaLocal = «=ГИПЕРССЫЛКА(» & Quotes(«[C:Книга.xls]») & «)»

 

Cryphon

Пользователь

Сообщений: 12
Регистрация: 31.05.2020

#1

07.10.2020 08:53:20

Всем доброго дня! Поиском пользовался, но в разрезе vba не смог найти ответ на свой вопрос. Визуально ситуацию отобразил во вложении.

Подскажите, пожалуйста, как правильно прописать код, чтобы убрать двойные кавычки в конце строки?

Код
If CheckBox1.value = False Then
        If TextBox7.value = "" Then
            Label14 = Abr
        Else
            Label14 = Abr & " """ & TextBox7.value & """"
        End If
    Else
    Label14 = Abr & " """ & TextBox22.value & """"
    End If

Прикрепленные файлы

  • Пример1.png (12.37 КБ)

 

Cryphon, и каков должен быть результат?
Форму для проверки вы нам самим предлагаете нарисовать?

 

Cryphon

Пользователь

Сообщений: 12
Регистрация: 31.05.2020

Михаил Витальевич С., исправляюсь

Вводная: есть организации, где полное наименование записано в дополнительных кавычках, как это указано на картинке в первом сообщении. Можно, конечно, просто не дописывать эту кавычку в конце, но тут уже больше спортивный интерес и пополнение знаний. Во вложении необходимый кусок формы

Форма нужна для автозаполнения договоров, поэтому и краткий, и полный вариант наименований задействованы.

Прикрепленные файлы

  • Пример.docm (19.93 КБ)

Изменено: Cryphon07.10.2020 13:11:41

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#4

07.10.2020 13:11:09

В общем случае это выглядит так:

Код
Sub qqq()
Dim OldText As String, NewText As String
    OldText = "Мой текст"
    MsgBox OldText
    NewText = """" & OldText & """"
    MsgBox NewText
End Sub

А можно схитрить: писать два апострофа подряд )

 

Nordheim

Пользователь

Сообщений: 3154
Регистрация: 18.04.2017

#5

07.10.2020 13:30:38

Cryphon, А для чего прикладывать файл word, форма в котором не активируется?
По вопросу, можно таким методом воспользоваться

Код
Sub qqq()
    Dim OldText As String, NewText As String
    OldText = "Мой текст"
    MsgBox OldText
    NewText = Chr(34) & OldText & Chr(34)
    MsgBox NewText
End Sub

Изменено: Nordheim07.10.2020 13:32:40

«Все гениальное просто, а все простое гениально!!!»

 

Cryphon

Пользователь

Сообщений: 12
Регистрация: 31.05.2020

Юрий М, я заметил, что, видимо, неверно описал ситуацию: в Label, при вводе в Textbox «полное наименование» текста с кавычками, подставляется вторая кавычка в конце строки. По поводу Вашего примера — это да, согласен, но тут идея в том, что если в конце TextBox’а уже есть кавычка, то хотелось бы, чтобы в Label вставала кавычка только в начале. Таким образом вопрос: как правильно vba донести, что в случае если в текстбоксе последний символ кавычка, то в Label пишем просто «»»» & OldText. Надеюсь, описал понятно

 

Cryphon

Пользователь

Сообщений: 12
Регистрация: 31.05.2020

#7

07.10.2020 13:44:17

Цитата
Nordheim написал:
А для чего прикладывать файл word, форма в котором не активируется?

На всякий случай прописал верную инициализацию

Прикрепленные файлы

  • Пример.docm (24.2 КБ)

 

Михаил Витальевич С.

Пользователь

Сообщений: 10514
Регистрация: 21.12.2012

#8

07.10.2020 13:52:15

В общем, методом тыка:

Код
Private Sub TextBox22_Change()
    If CheckBox1.value = True Then
        If TextBox22.value = "" Then
            Label14 = Abr
        Else
            Label14 = Abr & " """ & Replace(TextBox22.value, Chr(34), "") & """"
        End If
    Else
    Label14 = Abr & " """ & Replace(TextBox22.value, Chr(34), "") & """"
    End If
End Sub
 

Cryphon

Пользователь

Сообщений: 12
Регистрация: 31.05.2020

#9

07.10.2020 14:03:11

Всем спасибо, сам себе и ответил =))
Сработало в таком виде:

Код
        If TextBox22.value = "" Then
            Label14 = Abr
        ElseIf Right(TextBox22.value, 1) = Chr(34) Then
            Label14 = Abr & " """ & TextBox22.value
        Else
            Label14 = Abr & " """ & TextBox22.value & """"
        End If

Изменено: Cryphon07.10.2020 14:04:24

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Только сейчас заметил — а почему мы обсуждаем Word?

 

Cryphon

Пользователь

Сообщений: 12
Регистрация: 31.05.2020

Юрий М, Прошу прощения, сам только сейчас понял, что зашел по привычке в ветку эксель. Если есть возможность, перенесите, пожалуйста

 

Михаил Витальевич С.

Пользователь

Сообщений: 10514
Регистрация: 21.12.2012

#12

07.10.2020 14:10:27

Цитата
Cryphon написал:
убирает обе кавычки, а надо последнюю.

ну, в общем-то, по правилам русского языка, правильно либо «Группа компаний «Группа СТД»» либо «Группа компаний Группа СТД», а «Группа компаний «Группа СТД» неправильно…

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#13

07.10.2020 14:35:03

зачем ставить лишние кавычки чтобы потом их убирать?
не ставьте — не нужно будет убирать

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

Понравилась статья? Поделить с друзьями:
  • Excel vba дата сохранения файла
  • Excel vba дата изменения файла
  • Excel vba группировать строки
  • Excel vba границы таблицы
  • Excel vba границы листа