К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Вопрос знатокам VisualBasic - что за мистические dim ?

0 - 02.02.2015 - 23:37
В Delphi7 выполняется обычный код:

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

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

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

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



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

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



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

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

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

А как же тогда угловые кавычки «» внести в параметры команды WordBasic.Insert?
Гость
2 - 03.02.2015 - 09:05
Для справки: dim в VisualBasic обозначает объявление локальной переменной.
Гость
3 - 03.02.2015 - 13:49
2225777 - на скрине в 14-й строке подсвечен не ASCII-смовол, обозначенный знаком ? - это ошибка. Возможно она следствие грубого копирования текста из чего-то непотребного типа Блокнота... Блокнот - самоя вредная программа и привычка для программистов.

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

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

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

Кстати, парные кавычки даже в самом Word-е неправильно разворачиваются в целом ряде случаев. Поэтому для серьезных дел от них отказываются. Это такой же маразм, как писать инициалы перед ФИО, в то время как везде в компьютерной обработке наоборот. Стандартописателям обоих полов надо вырвать парные органы, чтобы не плодили свои стандарты...
4 - 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 сказал вот это :-)

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

Как же тогда написать, чтобы функция Chr перестала быть неопределённой? :-)
Гость
6 - 05.02.2015 - 10:40
Мдя, вот изврат-то какой в исполнении программистов: вставлять кодом на Delphi код VBA, и при этом еще и парсить его криво. Впрочем, дельфийских поделок вокруг столько, что проще переделать систему сбора заявок на чистом VBA (я бы так поступил).

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

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

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

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

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

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

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

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

или

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

/code

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


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены