Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 12:46

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 20:54 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Уважаемые формучане. Сегодня возникла следующая проблема - есть шейп у которого определены данные текстового типа. Через VBA нужно ввести определены текст в ячейку. Обычно я делаю это следующим образом:
Код:
ShapeX.Cells("Prop.Row_1").Formula="""" & "Text" & """"

Но как быть с текстом который уже содержит кавычки, типа АО "Компания". Гугл ничего путного не дал.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 21:07 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Код:
sh.Cells("user.row_3").Formula = """ООО """ & "" & """Рога и Копыта""" & """"""
у меня так работает
Дополнено позднее: как вариант использовать другой вид кавычек - ёлочки

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 21:22 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
За ёлочки отдельная благодарность. Но немного усложним ситуацию. Если текст с кавычками был уже забит в переменную. Как эту переменную (её значение) загнать в ячейку (без ёлочек)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 21:24 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
и в каком виде он забит в переменную ? можно поэкспериментировать с заменой комбинаций пробел+кавычка и кавычка+пробел.
еще вопрос, кавычка будет последним символом как в варианте АО "Колокольчик"?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 21:33 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Я считываю данные из excel. Поэтому текст может быть любой, и кавычка может появиться в любом месте. Собственно весь текст из ячейки excel будет забит в переменную (как есть) и дальше нужно это вставить ячейку фигуры visio


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 21:42 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
я и сам столкнулся с подобной ситуацией ранее, поэтому придумал для себя вариант с заменой на ёлочки
Surrogate писал(а):
можно поэкспериментировать с заменой комбинаций пробел+кавычка и кавычка+пробел.

Код:
Replace(Replace(ts, " " & Chr(34), " " & Chr(171)), Chr(34) & " ", Chr(187) & " ")

Также можно проверять является ли кавычки первым и последним символом и производить замену на открывающую и закрывающую елочку соответственно

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 21:57 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Думаю, что универсально будет прогнать текст через цикл, в котором через функцию instr искать кавычки, и менять на
нужные елочки, каждый раз начиная искать с последней найденной кавычки.
Или через регулярные выражения как то подумать


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 22:06 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Универсальная операция - удвоение кавычек.
Единственное, о чем нужно помнить - если понадобится текст извлекать обратно, то нужно будет пары кавычек менять на одиночные.
Код:
    ' Предположим, что в "тексте" много ""кавычек"".
    ActivePage.Shapes(1).Text = "Предположим, что в ""тексте"" много """"кавычек""""."


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 22:19 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Появилась очень странная мысль, точнее алгоритм.
Создаю в shapesheet документа user-defined ячейку User.Temp
Считываю текст, содержащий кавычки, заменяю все кавычки любым нейтральным символом
Записываю этот текст user.temp.prompt через VBA
В User.Temp устанавливаю формулу (через VBA) SETF. Которая будет устанавливать в нужную ячейку текст, но с обратной заменой нейтрального символа на кавычки.
Только чую, что быстродействие пострадает в этом случае.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 22:22 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tumanov в сообщении #12591 писал(а):
Универсальная операция - удвоение кавычек.
да, мы помним
Tumanov писал(а):
Но сейчас мы живем не с типографиями, а с интернетом и связанными с ним технологиями. А там любое извращение обязательно когда-нибудь выходит боком.
Когда-нибудь вы подсунете пользователю текст, в котором "русские" кавычки превратятся в нечитаемый символ. Или в базе не сравнятся две строки, которые вроде бы обязательно должны были сравниться.
Это раньше пользователь смотрел глазами на напечатанную страницу.
Сейчас он видит текст, которые по пути до него прошел огромную кучу программного обеспечения. И каждый винтик в этой куче мог понять эти русскости или французскости по-разному. Что до вас дойдет в итоге - неизвестно.
вариант передачи в ячейку был посложнее
Surrogate писал(а):
sh.Cells("user.row_3").Formula = """ООО """ & "" & """Рога и Копыта""" & """"""

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 22:57 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Вот не понял, в чем сложность-то?
Взять текст из внешнего источника, задвоить кавычки, добавить внешние строковые кавычки и записать.
И не нужно никаких суперхитрых замен.
Что не так?


Вложения:
rk.gif
rk.gif [ 112.57 Кб | Просмотров: 837 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 22 июл 2019, 23:40 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tumanov писал(а):
Взять текст из внешнего источника, задвоить кавычки, добавить внешние строковые кавычки и записать.
да, у меня сработало вытягивание из экселя!
Код:
Dim sh As Shape, wb As Object, wa As Object, st$
Set wa = GetObject(, "excel.application")
Set wb = wa.activeworkbook
st = wb.sheets(1).Cells(1, 1)
st = Chr(34) & Replace(st, Chr(34), Chr(34) & Chr(34)) & Chr(34)
Set sh = ActivePage.Shapes(1)
sh.Cells("user.row_3").Formula = st

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как ввест в ячейку текст, который содержит кавычки через VBA
СообщениеДобавлено: 23 июл 2019, 06:51 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Вариант с задвоением кавычек работает превосходно. Благодарю всех, кто принял участие в обсуждении!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB