Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   Вопрос знатокам VisualBasic - что за мистические dim ? (http://forums.kuban.ru/f1024/vopros_znatokam_visualbasic_-_chto_za_misticheskie_dim-6477900.html)

2225777 02.02.2015 23:37

Вопрос знатокам VisualBasic - что за мистические dim ?
 
В Delphi7 выполняется обычный код:

pchDDECommand := StrAlloc(Length(sDDECommand) + 1);
StrPCopy(pchDDECommand, sDDECommand);

sDDECommand заполнена командами VisualBasic, в отладке хорошо видно, сто начинается строка со слов WordBasic.FileOpen !!!

Запускаем макрос в Word
ddeclientCaptain.ExecuteMacro(pchDDECommand, false)

и видим ошибку:

[img]http://s017.radikal.ru/i424/1502/e0/a05b220f312b.jpg[/img]

Что за мистические dim в начале?

Кто-нибудь сталкивался с подобным?
Хоть в каком направлении копать? :-)

2225777 03.02.2015 00:49

Приблизительно понятно, в чём дело...
Дело в двойных кавычках.
Где-то в параметрах команды WordBasic.Insert встретились двойные кавычки - и для стали "переменными"...

Хорошо, двойные кавычки " мы удвоим.

А угловые кавычки вообще не отображаются в конечном документе вместе со своим содержимым!

А как же тогда угловые кавычки «» внести в параметры команды WordBasic.Insert?

1is 03.02.2015 09:05

Для справки: dim в VisualBasic обозначает объявление локальной переменной.

economist 03.02.2015 13:49

2225777 - на скрине в 14-й строке подсвечен не ASCII-смовол, обозначенный знаком ? - это ошибка. Возможно она следствие грубого копирования текста из чего-то непотребного типа Блокнота... Блокнот - самоя вредная программа и привычка для программистов.

Поставьте в Word VBA IDE нормальный простой пропорциональный шрифт (Courier New Cyr) - и будете легко отличать парные, косые и типографские кавычки в тексте кода. У вас в коде ВЕЗДЕ не те кавычки, допустимы ТОЛЬКО простые - "

Обычная типографская кавычка - " - CHR(34)

Если позарез нужны в параметры команды WordBasic.Insert всунуть разнонаправленные "парные" кавычки, то это коды 147/148, а также "русские"-умолчальные в Word, коды 171, 187.

Кстати, парные кавычки даже в самом Word-е неправильно разворачиваются в целом ряде случаев. Поэтому для серьезных дел от них отказываются. Это такой же маразм, как писать инициалы перед ФИО, в то время как везде в компьютерной обработке наоборот. Стандартописателям обоих полов надо вырвать парные органы, чтобы не плодили свои стандарты...

2225777 03.02.2015 17:13

2 economist:
Спасибо большое за Ваши дельные советы! :-)

К сожалению, я сама не управляю кавычками именно в среде VisualBasic - код передаётся из Delphi7, а в Delphi - обычная запись:

sDDECommand :=
'[FileOpen "' + sSelectedDoc + '" ][StartOfDocument]' +

...

'[EditBookmark .Name = "clientsName02", .Goto][Insert "' + sClnName + '"]' +
'[ViewPage]' + sCommandDate + sCommandFileSave;


То есть, просто ввожу в строке, заключаемой в одинарные кавычки, - двойные кавычки с клавиатуры.


А насчёт символов 171 и 187 вот на такой код из Delphi7

str:= StringReplace(str, '«', '" + Chr(171) + "', [rfReplaceAll]);
str:= StringReplace(str, '»', '" + Chr(187) + "', [rfReplaceAll]);

товарищ VisualBasic сказал вот это :-)

[img]http://s015.radikal.ru/i332/1502/3f/382c9ae2ceb1.jpg[/img]

2225777 03.02.2015 17:16

На скрине не видно подсвечивание ошибки: это Chr___(171) и Chr___(187)...

Как же тогда написать, чтобы функция Chr перестала быть неопределённой? :-)

economist 05.02.2015 10:40

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

У вас не работает код потому что неправильно вставился код функций - нельзя ____ !

Просто Chr(171) и Chr(187)

И еще раз подумайте - нахрена вам парность кавычек? Что за антиинформационный перфекционизм?

Ставьте обычные в выражении вот так:
"Адрес: " & "Ул. Мира, д. 5, корпус ""б"""

Получится вот так:
Адрес: Ул. Мира, д. 5, корпус "б"

И еще - замените все косые кавычки в коде на ровные, как зубы у зайца - "

И попробуйте в Delphi

str:= StringReplace(str, '«', '""', [rfReplaceAll]);

или

str:= StringReplace(str, '«', '"', [rfReplaceAll]);

economist 05.02.2015 10:43

Чтобы видеть в Форуме код как код, моноширинным грифтом - его надо заключить в теги:
[code]
[code]
str:= StringReplace(str, '«', '"', [rfReplaceAll]);
[/code]
[/code]

economist 05.02.2015 10:50

теги
code

/code

все в квадратных скобках


Текущее время: 10:35. Часовой пояс GMT +3.