Страница 1 из 1
Ошибка запуска макроса.
Добавлено: 02 сен 2015, 17:05
Irina_
Здравствуйте. Столкнулась с проблемой, которую не получается решить. Может кто-то может помочь.
2 пользователя (пусть User1 и User2) работают по удаленке, в Галактику оба входят под одним дескриптором (пусть это Des1), формируют один отчет пользователя с выводом в EXCEL. В исходнике этого отчета в частности используется xlImpotrModule(…), а потом xlRunMacro(…). Для обоих пользователей xlImpotrModule(…)=true, а вот с запуском макроса проблема: для User1 xlRunMacro(…)=true, а для User2 xlRunMacro(…)=false. Если xlRunMacro(…)=false, то xlGetLastError возвращает 0. Вопрос: что это за ошибка? Что надо сделать, чтобы макрос у User2 запускался?
Re: Ошибка запуска макроса.
Добавлено: 03 сен 2015, 16:28
Irina_
Здравствуйте. Отвечаю сама себе. Опять наступила на одни и те же грабли, хотя первый раз это было при решении совершенно другой проблемы. Причина проблемы в том, что для учетных записей на сервере в «Языки и региональные стандарты» стоял разный разделитель целой и дробной части. У меня стояла точка, и проблемы с запуском макроса не было, у другого пользователя запятая, и макрос не запускался. Пользователь (за последнее время он уже 3-ий) категорически отказывается от установки разделителем точки. Меня же не устраивает запятая. Поэтому нужно, чтобы при разных разделителях и с установкой форматов в ячейках, и с заданием формул, и с запуском макросов (с передачей параметров) не возникало бы проблем.
В xlRunMacro передается строка, содержащая имя макроса и при необходимости в скобках параметры, разделенные запятыми. У меня в макросе было несколько параметров. Тогда возникает проблема, если разделителем стоит запятая и надо в качестве одного из параметров передать вещественное число: опять получим ошибку запуска макроса, т.к. визуально получим из-за запятых больше параметров при вызове, чем надо. Тогда придется избавиться от передачи в качестве параметра вещественного числа одним из способов:
- заносить нужное число в какую-то ячейку и в макросе считывать число из нее
- если число с n знаками после запятой, то передавать в качестве параметра число * 10 ** n (где ** - возведение в степень), т.е целое число, а в макросе рассчитать нужное значение как переданный параметр / 10**n.
Re: Ошибка запуска макроса.
Добавлено: 03 сен 2015, 16:56
RAJAH
xlGetDecimalSeparator (или просто GetDecimalSeparator) используйте.
Re: Ошибка запуска макроса.
Добавлено: 04 сен 2015, 10:44
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(‘Ошибка запуска макроса’);
В случае разделителя запятой получим ошибку запуска макроса.