|
Компиляция кода в зависимости от версии Access
|
|||
---|---|---|---|
#18+
Проблема. программа работает под Access версий от 2000 до 2016. Хотел сделать подпрограмму для сворачивания при запуске ленты Ribbon. Написал такую вещь. Поскольку в А2000-2003 ленты нет, воспользовался операторами условной компиляции Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
По идее в Access 2003 вторая ветка не должна компилироваться. Но при запуске функции Access останавливается на операторе .ExecuteMso и выдаёт сообщение Method or data member not found . Что делать? Причём вот такая структура работает Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
------------------------------------------------------------- А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 10:10 |
|
Компиляция кода в зависимости от версии Access
|
|||
---|---|---|---|
#18+
Значение, которое проверяется в директиве условной компиляции, должно быть определено на момент компиляции (а не вовремя выполнения). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 10:28 |
|
Компиляция кода в зависимости от версии Access
|
|||
---|---|---|---|
#18+
И как это здесь провернуть? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 10:40 |
|
Компиляция кода в зависимости от версии Access
|
|||
---|---|---|---|
#18+
Переместите код минимизации в процедуру. Вместо условной компиляции примените обращение к этой процедуре по условию. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Компиляция процедуры, конечно, выполняется, но вот проверка существования метода CommandBars.ExecuteMso выполняется только в момент обращения к процедуре. Соответственно если версия Access не знает про этот метод, то условие в DbRibbonMinimize не вызывает процедуру, и ошибки не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 10:54 |
|
Компиляция кода в зависимости от версии Access
|
|||
---|---|---|---|
#18+
Спасибо. Я выкрутился несколько иначе. Команда CommandBars.ExecuteMso "MinimizeRibbon" работает только в Access начиная с версии 2010. А в Версии 2010 уже используется VBA7. Так что я переделал код следующим образом Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
А за предложение спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 11:13 |
|
Компиляция кода в зависимости от версии Access
|
|||
---|---|---|---|
#18+
Да, с таким изменением компиляция в Access 2003 и в access 2010 проходит без ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 11:20 |
|
Компиляция кода в зависимости от версии Access
|
|||
---|---|---|---|
#18+
Joss, В эту сторону, имхо, нужно двигаться - 5171537 И работать с этими параметрами можно программно: Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 11:21 |
|
Компиляция кода в зависимости от версии Access
|
|||
---|---|---|---|
#18+
Вот что нашел в учебнике про условную компиляцию В VBA имеются две инструкции компилятора, с помощью которых можно обеспечить условную компиляцию некоторых фрагментов исходного кода. Для условной компиляции необходимо определить условные константы компилятора, значениями которых будет руководствоваться компилятор при обработке программы. Константы должны быть определены в разделе глобальных объявлений модуля. Синтаксис: Код: vbnet 1.
Аргументы: имяКонстанты - имя константы; должно соответствовать стандартным соглашениям об именах переменных. выражение - константа в явном представлении, другая условная константа компилятора или любая их комбинация, которая включает любые арифметические или логические операторы, за исключением Is. Чтобы указать компилятору, какие фрагменты кода компилировать при разных условиях, используется инструкция #If. Оператор If является объектом компилирования в отличие от инструкции #If, которая является служебной пометкой в тексте, принимаемой компилятором к сведению. Синтаксис: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
В приведенном ниже примере инструкции условной компиляции используются для того, чтобы в вариантах исполняемого файла в качестве имени файла заставки в строковую переменную загружать имена двух различных файлов. Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 12:01 |
|
Компиляция кода в зависимости от версии Access
|
|||
---|---|---|---|
#18+
JossА в Версии 2010 уже используется VBA7. только в 64 битном офисе ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 14:21 |
|
Компиляция кода в зависимости от версии Access
|
|||
---|---|---|---|
#18+
#JossА в Версии 2010 уже используется VBA7. только в 64 битном офисе Неправда Ваша. И 32-х разрядной версии VBA7 существует и прекрасно работает. Обратите внимание на предоставленный код Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Сначала идёт проверка на версию VBA , а затем на разрядность. Вот VBA6, тот только 32-х разрядный. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2017, 11:51 |
|
|
start [/forum/topic.php?fid=45&fpage=73&tid=1612352]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
35ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 310ms |
total: | 464ms |
0 / 0 |