Некорректно работает скрипт добавления выпадающего списка

Автор Sirius34, 13 мая 2024, 23:28

0 Пользователи и 1 гость просматривают эту тему.

Sirius34

Всем доброго времени суток!

Есть xlsm-файл.
В файле есть скрипт на событие Workbook_Open, который при открытии файла проверяет наличие обновленного справочника, при необходимости его обновляет и перепривязывает выпадающие списки к ячейкам столбцов (через проверку данных).
Списки привязываются так.
            Range("A2:A400").Select
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=Справочник!$A$3:$A$9"
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With

Проблема в том, что в по непонятным мне причинам в Excel этот скрипт отрабатывает без проблем, а в Calc вроде и не выдаёт ошибку, но и нужный справочник не привязывается. (скриншот)
Если загружать файл с уже привязанным списком, то проблем нет.
Если я правильно понял, то вся сложность в том, что Calc иным способом адресуется к другим листам.
в Excel = Справочник!$A$3:$A$9
в Calc = $Справочник.$A$3:$A$9

Можно ли как-то решить проблему?

Использовать именованные диапазоны нельзя, т.к. тогда при "слиянии" типовых листов с данными из нескольких однотипных файлов возникает проблема добавления в сводный файл кучи связей с файлами-исходниками.

mikekaganski

#1
Цитата: Sirius34 от 13 мая 2024, 23:28Если я правильно понял, то вся сложность в том, что Calc иным способом адресуется к другим листам.

Цитата: Sirius34 от 13 мая 2024, 23:28Можно ли как-то решить проблему?

Если Вы поняли правильно (что скорее всего так, поскольку в коде я не вижу преобразования синтаксиса Excel в синтаксис Calc при вызове собственного API), то единственный правильный способ решить проблему - написать баг. Конечно, можно ещё изменить код так, чтобы детектировался Calc, и в этом случае использовался другой синтаксис - но во-первых, это костыль, усложняющий код; а во-вторых, требование использовать синтаксис Calc в коде VBA - это однозначно баг, а значит, он рано или поздно будет исправлен, и тогда костыль сломается.
С уважением,
Михаил Каганский

Sirius34

Цитата: mikekaganski от 14 мая 2024, 07:39единственный правильный способ решить проблему - написать баг

Создал #161019.
Не силён в английском, текст писал с помощью переводчика.
Посмотрите, пожалуйста, если не затруднит.