Alena_ama написал(а):
Добрый день,
При переходе на Excel 2016 года при выгрузке файла в Excel с помощью функции 'ZWWW_OPENFORM" перестал запускаться Макрос.
Var_Name = 'mac'
Var_num = 00000
Find_text = ''
Val_type = 'M'
Value = 'Макрос1'
При этом Имя 'mac' прописано в Excel файле.
В 2010 Excel этот же макрос отрабатывает.
Подскажите, как можно решить проблему
Добрый день!
Спасибо за присланный шаблон. Отвечу здесь, чтобы и другим пригодилось.
Строго говоря, ваш макрос запускается раньше, чем заполняется таблица. Потому что имя ячейки MAC2, для которой применяется макрос, выше по алфавиту, чем TAB для таблицы. Поэтому форматирования табличных данных не происходит.
После того, как я присвоил ячейке имя ZAC2, а также заменил имя в вызове макроса в IT_VALUES, форматирование заработало.
К вопросу о версиях Excel. Логика, описанная мной, должна работать на всех версиях одинаково. ZWWW специально сортирует таблицу IT_VALUES, чтобы соблюдался данный порядок. Однако на некоторых проектах я сталкивался с тем, что мой код подламывают, отменяя эту сортировку. Мало того, что эта идея нарушает логику работы ZWWW, не давая никаких явных преимуществ, это ещё и создаёт проблемы при поддержке ZWWW и обновлении версий. Поэтому некоторые устанавливают новые версии вручную, под другими именами ФМ, чтобы не трогать старый ломанный код. Более того, я видел решения, когда в зависимости от версии Excel вызывались разные версии ZWWW. Возможно даже я это видел на вашем проекте, т.к. работал на нём года 1,5-2 назад. В таком случае может оказаться, что для Excel 2010 вызывается старый код с нарушением сортировки и Ваша форма нормально заполняется, а для версии Excel 2016 вызывается новый не ломанный код и форма не заполняется.
В любом случае, рекомендую придерживаться логики работы настоящего ZWWW.
p.s.
Есть ещё один нюанс, почему макросы могут не вызываться. Когда то давно я столкнулся с тем, что не вызываются макросы, имеющие такие же имена, как и у ячеек. Т.е. в вашем случае, если присвоить имя макросу Sub Mac2 (или Zac2 с моим изменением), то он тоже не сработает. Это особенность самого Excel.
И ещё один, более тонкий нюанс, касаемо коротких имён вроде MAC, MAC2 или TAB. Если, например, в Excel 2003 я легко присваиваю имя MAC2 любой ячейке, то в Excel 2013 я не могу сделать этого. Дело в том, что у 2003 допустимое количество столбцов 255, а у 2013 максимальное количество 16384. Следовательно MAC2 это уже существующая ячейка в столбце 13*26*26+1*26+3=8817 и строке 2. Соответственно, MAC и TAB это стандартные имена целых столбцов.
В связи с этим я даже не берусь судить, как себя поведёт Excel 2013 (2007, 2010, 2016) при использовании шаблонов в подобными именами. Лучше себя обезопасить и присваивать ячейкам более длинные и сложные имена.