Ошибка запуска макроса.

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Ошибка запуска макроса.

Сообщение Irina_ »

Здравствуйте. Столкнулась с проблемой, которую не получается решить. Может кто-то может помочь.
2 пользователя (пусть User1 и User2) работают по удаленке, в Галактику оба входят под одним дескриптором (пусть это Des1), формируют один отчет пользователя с выводом в EXCEL. В исходнике этого отчета в частности используется xlImpotrModule(…), а потом xlRunMacro(…). Для обоих пользователей xlImpotrModule(…)=true, а вот с запуском макроса проблема: для User1 xlRunMacro(…)=true, а для User2 xlRunMacro(…)=false. Если xlRunMacro(…)=false, то xlGetLastError возвращает 0. Вопрос: что это за ошибка? Что надо сделать, чтобы макрос у User2 запускался?
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Ошибка запуска макроса.

Сообщение Irina_ »

Здравствуйте. Отвечаю сама себе. Опять наступила на одни и те же грабли, хотя первый раз это было при решении совершенно другой проблемы. Причина проблемы в том, что для учетных записей на сервере в «Языки и региональные стандарты» стоял разный разделитель целой и дробной части. У меня стояла точка, и проблемы с запуском макроса не было, у другого пользователя запятая, и макрос не запускался. Пользователь (за последнее время он уже 3-ий) категорически отказывается от установки разделителем точки. Меня же не устраивает запятая. Поэтому нужно, чтобы при разных разделителях и с установкой форматов в ячейках, и с заданием формул, и с запуском макросов (с передачей параметров) не возникало бы проблем.
В xlRunMacro передается строка, содержащая имя макроса и при необходимости в скобках параметры, разделенные запятыми. У меня в макросе было несколько параметров. Тогда возникает проблема, если разделителем стоит запятая и надо в качестве одного из параметров передать вещественное число: опять получим ошибку запуска макроса, т.к. визуально получим из-за запятых больше параметров при вызове, чем надо. Тогда придется избавиться от передачи в качестве параметра вещественного числа одним из способов:
- заносить нужное число в какую-то ячейку и в макросе считывать число из нее
- если число с n знаками после запятой, то передавать в качестве параметра число * 10 ** n (где ** - возведение в степень), т.е целое число, а в макросе рассчитать нужное значение как переданный параметр / 10**n.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Ошибка запуска макроса.

Сообщение RAJAH »

xlGetDecimalSeparator (или просто GetDecimalSeparator) используйте.
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Ошибка запуска макроса.

Сообщение Irina_ »

Здравствуйте. Если быть более точным, то правильно использовать следующее:
Var DecSep, DecSepXL, UseDecSep : Char;
n_format2 : String;

DecSep:= GetDecimalSeparator;
if xlGetUseSystemSeparator // в Exsel используется системный разделитель целой и дробной части
DecSepXL:= DecSep;
else
DecSepXL:= xlGetDecimalSeparator;
UseDecSep:= DecSepXL;
n_format2 := '# ##0' + UseDecSep + '00';

Так у меня и было. Это помогало устанавливать формат ячейки. Но с запуском макроса в случае запятой в качестве разделителя и вещественным параметром можем получить следующее.
Пусть описание в макросе:
Sub Macro1( par1 As Integer, par2 As Double)

End Sub

В исходнике на Vip надо сформировать строку запуска макроса с нужными значениями параметров, например:
Var str1 : String;
dPar1, dPar2 : Double;

dPar1:= Round(…,0);
dPar2:= 1.2;
str1:= 'Macro1' + '('+ String(integer(dPar1)) + ',' + String(dPar2) + ')';
If xlRunMacro(str1) = false
Message(‘Ошибка запуска макроса’);

В случае разделителя запятой получим ошибку запуска макроса.
Ответить