powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Константы условной компиляции
47 сообщений из 47, показаны все 2 страниц
Константы условной компиляции
    #39204259
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Потребовалось мне одну разработку регулярно переводить в различные версии Access, включая Ac97.
В разработке использованы некоторые возможности более поздних версий, неизвестные 97-ому.
В частности, условное форматирование.
Задается оно программно – изначально в ленточной форме отсутствует, чтобы не мигало и не тормозило,
а в определенном случае создаются нужные правила, это вынесено в отдельную процедуру.
Чтобы исключить ошибки компиляции, в Ac97 попробовала применить условную компиляцию.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 Dim S As String
 S = SysCmd(acSysCmdAccessVer)
 #If S = "8.0" Then
  <ничего не должно происходить>
 #Else
  With Forms!<имя формы>
   If .<имя поля_1>.FormatConditions.Count = 0 Then
    .<имя поля_1>.FormatConditions.Add acExpression, , "<условие>"
    .<имя поля_1>.FormatConditions(0).BackColor = RGB(210, 255, 210)
    …………………………………………………
   End If
  End With
 #End If

Разумеется,
Код: vbnet
1.
2.
3.
 Dim S As String
 S = SysCmd(acSysCmdAccessVer)
 #If S = "8.0" Then

оказалось глупостью, ведь значение S в момент компиляции не определено, да и само S тоже.

Передавать аргументы условной компиляции извне не очень хочется,
так как потребуется их каждый раз задавать вручную.
Кроме того, они и задаются по-разному:
для Ac97 — через главное меню БД
Код: vbnet
1.
Сервис —> Параметры.—> Другие —> Аргументы условной компиляции

для Ac2000 и далее — через редактор VBA
Код: vbnet
1.
Tools —> Project Properties Dialog Box —> General Tab —> Conditional Compilation Arguments


Запускать через ярлык со значением аргумента условной компиляции тоже не очень удобно.

Пока вижу наименее трудоемкий способ таким – два разных условия и переносить знак комментария:
Код: vbnet
1.
2.
3.
4.
5.
6.
#If True Then           ‘     для Ac97
‘#If False Then         ‘     для Ac2000 и далее
  <ничего не должно происходить>
#Else
  <необходимые действия>
#End If

Всего одно движение.
Но хочется так наладить, чтобы все происходило вообще само собой, без моего участия каждый раз.

Поэтому такой вопрос:

Есть ли такая константа компилятора VBA, значение которой будет говорить об используемой версии Access, или хотя бы офиса?
По аналогии с константами Win16/Win32/Win64.

Список имеющихся констант смотрела https://msdn.microsoft.com/ru-ru/library/office/gg264614.aspx.
Но вдруг кто-то знает секретные константы.)))
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39204273
akirey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle,

Константы VBA6 и VBA7 не помогут?
Вроде как VBA6 это до Ac97, а 7 2000 и дальше
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39204285
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akirey,

Спасибо.
Очень возможно.
Доступ к 97-му буду иметь завтра, там и проверю.
Думаю, главное определить, что это 97, то есть достаточно будет проверять Vba6.
Для всех же остальных версий действия одинаковые.

А если на машине несколько офисов, не перекроется ли более раннее VBA более поздним?
Наверное, все же нет.
В общем, надо все проверить.

О результатах сообщу.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39204307
__Michelle
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 Dim S As String
 S = SysCmd(acSysCmdAccessVer)
 #If S = "8.0" Then
  <ничего не должно происходить>
 #Else
  With Forms!<имя формы>
   If .<имя поля_1>.FormatConditions.Count = 0 Then
    .<имя поля_1>.FormatConditions.Add acExpression, , "<условие>"
    .<имя поля_1>.FormatConditions(0).BackColor = RGB(210, 255, 210)
    …………………………………………………
   End If
  End With
 #End If

В вашем конкретном случае условная компиляция не нужна. Достаточно обычного If, т.к. наличие свойства/метода у объекта при компиляции не проверяется.
Только acExpression нужно заменить значением или собственной (можно одноименной) константой.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39204319
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев ),

Да. Спасибо.
Этот вариант мною уже опробован как запасной.
Но я еще для гарантии вместо явного указания формы сделала так
Код: vbnet
1.
2.
3.
4.
Dim Ob As Object
Set Ob = Forms!<имя формы>
With Ob
...................

Может, это использование объекта и лишнее.
Вместо acExpression использовала 1.

Но это уже после того, как у меня не вышло с условной компиляцией.
А разобраться ведь все-таки надо.)))
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39204521
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle,

Есть ещё 1 вариант, правда очень трудоёмкий. Зато есть существенные плюсы.
Можно вообще убрать весь код из MS Access и написать VB скрипты, которые будут находиться в какой-либо таблице.
Создаёте единcтвенную VBA процедуру, которая и запускает VB скрипт. Что-то вроде этого 13121558

Правда VB скрипт немножко отличается от VBA, не все функции и процедуры есть в VBS, да и есть некоторые отличии. Со временем привык как-то. Всё, что VB скрипт не умеет, пришлось делать в VBA, а в VB скрипт вызывать их.

Какие существенные плюсы можно извлечь от этого?

1) Вам достаточно поменять данные в спец. таблице, где хранятся VB скрипты. У Всех юзеров не надо будет менять файл, а если все пользуются общим файлом, то не надо выгонять их.
2) Можно потихоньку создавать такие коды, которые будут работать в любой ОС и в любом офисе (32 или 64 разрядность не имеет значение, т.к. VBS это язык позднего связывания!).

Минусы:
1) Хлопотно такие коды писать. Лично я сначала тренируюсь в Excel, ибо нет необходимости предварительного сохранения тренировочного файла.
2) Нет возможности прервать запущенный VBS код с помощью Ctrl + Break.
3) Очень осторожно с таблицей, где будут хранится все скрипты. Нечаянно удалил, то всё. Все коды исчезнут. Поэтому тщательно нужно охранять от юзеров.

P.S.
Даже Win API функцию тоже можно вызывать в VB скрипт, только для этого сначала надо регистрировать библиотеку dynwrapx.dll.
Вот примерчик 14019148
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39204538
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle, добрый вечер.

Может пригодится, гляньте(из хелпа):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Dim strFormat As String

Select Case CurrentProject.FileFormat
    Case acFileFormatAccess2
        strFormat = "Microsoft Access 2"
    Case acFileFormatAccess95
        strFormat = "Microsoft Access 95"
    Case acFileFormatAccess97
        strFormat = "Microsoft Access 97"
    Case acFileFormatAccess2000
        strFormat = "Microsoft Access 2000"
    Case acFileFormatAccess2002
        strFormat = "Access 2002 - 2003"
    Case acFileFormatAccess12
        strFormat = "Microsoft Access 2007"
End Select

MsgBox "This is a " & strFormat & " project."
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39204542
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакшуль Сергей,

Если ТС и в правду юзает А97, то не пригодится. А97 не знает что такое currentproject.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39204550
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,

ну я не помню, как там 97-ом

но есть два св-ва:
CodeProject.FileFormat
CurrentProject.FileFormat

Returns an AcFileFormat constant indicating the Microsoft Access version format of the specified project. Read-only.
Может CodeProject нужно попробовать.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39204562
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,

Спасибо. Очень интересно.
Что-то более осмысленное сказать пока не в состоянии -
надо внимательно прочитать и здесь и по ссылкам. И не один раз.
Первое впечатление - весьма непростой вариант, для корифеев.)))
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39204565
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакшуль Сергей,

)))
Спасибо.
Но это действительно появилось позже.
Сейчас проверила в 2000-м - еще такого свойства нет, а вот в 2003-м уже есть.

И потом, ведь это, как мне кажется, примерно то же, что и SysCmd(acSysCmdAccessVer).
Только результат по-другому представлен.
А, нет, все же не полный аналог.
SysCmd(acSysCmdAccessVer) дает версию Access, а
CodeProject.FileFormat - в каком формате сохранен файл БД.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39204895
__Michelle, очень интересный вопрос вы задали.
Условную компиляцию использовал но глубоко не копал.
Оказывается, если в #If использовать выражение, которое не объявлено ни в #Const, ни в параметрах проекта, то оно воспринимается как False.
В А2010 есть внутренние константы VBA6 и VBA7, обе в #If принимаются как True. В А2000-2003 вероятно (проверить негде) только VBA6 - True. А А97, это VBA 5 , поэтому, ИМХО, достаточно проверять VBA6, чтоб выяснить это.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39206934
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев ), akirey,

Спасибо за идеи.
Прошу прощения за долгую паузу.)))

Проверила константы VBA6 и VBA7 в версиях Access 97, 2000, 2003, 2007.
Получилось следующее.
В 97-ом ни одна константа не известна.
2000-й, 2003-й, 2007-й знают только VBA6.
Гипотетической константы VBA5 нет вообще.
Окончательно сделала так:
Код: vbnet
1.
2.
3.
4.
5.
 #If VBA6 Then
  <настройка условного форматирования>
 #Else
  <ничего не должно происходить>
 #End If

Все работает. И не пришлось применять уловки, замещать acExpression значением.
_________________________________________________________________________________

Однако попутно возникли некоторые странности, заставившие разбираться.
Код: vbnet
1.
#If VBA6 Then

и
Код: vbnet
1.
#If Not VBA6 Then

дают одинаковый результат – Истина. Почему?
В конце концов, экспериментальным путем, выяснилось, что VBA6 = 1, а Not VBA6 = –2.
И то, и другое трактуется как Истина.
И вообще, Истиной считается любое ненулевое и непустое число –
как положительное, так и отрицательное, как целое, так и дробное.
А Not, согласно результатам моих экспериментов, действует на <значение> так:
Код: vbnet
1.
Not <значение> = ((-1) * <значение>)) + (-1) 

, то есть, например,
Код: vbnet
1.
2.
Not 10 = -11
Not (Not 10) = 10

Информация о том, что ненулевое число дает Истину, где-то мне раньше попадалась.

Что скажете обо всем этом?)))
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39206935
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
__MichelleИнформация о том, что ненулевое число дает Истину, где-то мне раньше попадалась.
If именно так и работает. Теперь мы знаем, что так же работает и #If.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39206936
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

Меня удивило, что поэтому
#If VBA6 Then
и
#If Not VBA6 Then
дают одинаковый результат.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207074
__MichelleА Not, согласно результатам моих экспериментов, действует на <значение> так:
Код: vbnet
1.
Not <значение> = ((-1) * <значение>)) + (-1) 


Из справки AccessIn addition, the Not operator inverts the bit values of any variable and sets the corresponding bit in result according to the following table:

If bit in expression isThen bit in result is 01 10
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207100
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
__MichelleВладимир Саныч,

Меня удивило, что поэтому
#If VBA6 Then
и
#If Not VBA6 Then
дают одинаковый результат.
Здесь Not работает как-то странно. If работает правильно.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207136
Владимир Саныч__MichelleВладимир Саныч,

Меня удивило, что поэтому
#If VBA6 Then
и
#If Not VBA6 Then
дают одинаковый результат.
Здесь Not работает как-то странно. If работает правильно.
Если принять во внимание
__Michelle... экспериментальным путем выяснилось, что VBA6 = 1 ...
то и Not работает правильно:
Код: vbnet
1.
2.
3.
4.
?Hex(Not 1)
FFFE
?&HFFFE
-2 
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207154
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но в справке также сказаноИз справки Access Remarks

The following table illustrates how result is determined:

If expression is Then result is True False False True Null Null
То есть, применение Not к выражению, трактуемому как True, должно давать False.
Возьмем выражение 1, это трактуется как True, но
Код: vbnet
1.
2.
Debug.Print CInt(Not 1)
-2 

.А –2 тоже трактуется как True.
Налицо противоречие.
Табличка, получается, справедлива только, если expression 0, -1 или Null.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207209
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle,

Код: vbnet
1.
#If Not VBA6 <> 0 Then

Многие функции API возвращают 0 или 1 как булевы значения, в системе они соответствуют False и True
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207216
__MichelleТо есть, применение Not к выражению, трактуемому как True, должно давать False.
Возьмем выражение 1, это трактуется как True, но
Код: vbnet
1.
2.
Debug.Print CInt(Not 1)
-2 

.А –2 тоже трактуется как True.
Налицо противоречие.
Табличка, получается, справедлива только, если expression 0, -1 или Null.
Единица трактуется как True инструкцией If, а Not считает ее числом.
Кроме того, обратите внимание, что True(-1) при инвертировании битов переходит в False(0) и наоборот - False в True.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
?Hex(Not False)
FFFF
?Hex(Not 0)
FFFF
?Hex(Not True)
0
?Hex(Not -1)
0
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207240
Michelle, мне нравится ваша жажда познания...
Итак:
1. Not, это оператор меняющий состояние каждого бита на противоположное, т.е. 1->0, а 0->1
2. Хоть VBA в операторах сравнения и оперирует понятиями ноль и не ноль, но родным True для него является -1, т.е. в FF в Hex, т.е. все биты равны 1. Поэтому Not превращает это значение в 0 и обратно.
Любые целые числа (отличные от 0 и -1) оператор Not превращает в другие целые числа.
При этом для всех числовых типов кроме Byte (здесь FF равно 255) самый старший бит определяет - положительное число или отрицательное.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207256
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев )Michelle, мне нравится ваша жажда познания...
Итак:
1. Not, это оператор меняющий состояние каждого бита на противоположное, т.е. 1->0, а 0->1
2. Хоть VBA в операторах сравнения и оперирует понятиями ноль и не ноль, но родным True для него является -1, т.е. в FF в Hex, т.е. все биты равны 1. Поэтому Not превращает это значение в 0 и обратно.
Любые целые числа (отличные от 0 и -1) оператор Not превращает в другие целые числа.
При этом для всех числовых типов кроме Byte (здесь FF равно 255) самый старший бит определяет - положительное число или отрицательное.
А есть есчё константа "-1".
С уважением.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207258
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIАнатолий ( Киев )Michelle, мне нравится ваша жажда познания...
Итак:
1. Not, это оператор меняющий состояние каждого бита на противоположное, т.е. 1->0, а 0->1
2. Хоть VBA в операторах сравнения и оперирует понятиями ноль и не ноль, но родным True для него является -1, т.е. в FF в Hex, т.е. все биты равны 1. Поэтому Not превращает это значение в 0 и обратно.
Любые целые числа (отличные от 0 и -1) оператор Not превращает в другие целые числа.
При этом для всех числовых типов кроме Byte (здесь FF равно 255) самый старший бит определяет - положительное число или отрицательное.
А есть есчё константа "-1".
С уважением.
Вернее значение, сори.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207385
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIА есть есчё константа "-1".
С уважением.ROIВернее значение, сориВ чем смысл Вашего замечания?
Прошу прощения, но мне кажется, что Вы сорите.)))
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207401
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michelle
Анатолий ( Киев )Любые целые числа (отличные от 0 и -1) оператор Not превращает в другие целые числа.
Вы правы был не внимателен
>>Прошу прощения, но мне кажется, что Вы сорите.)))
Есть маненько.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207410
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург
Код: vbnet
1.
#If Not VBA6 <> 0 Then

Многие функции API возвращают 0 или 1 как булевы значения, в системе они соответствуют False и True Такое условие дало False для совместимой среды разработки, и True для несовместимой.
Вроде, тоже правильно.
Но мне все же очевидней условие
Код: vbnet
1.
#If VBA6 Then

Только действия противоположные.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39207454
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев )Итак:
1. Not, это оператор меняющий состояние каждого бита на противоположное, т.е. 1->0, а 0->1
2. Хоть VBA в операторах сравнения и оперирует понятиями ноль и не ноль, но родным True для него является -1, т.е. в FF в Hex, т.е. все биты равны 1. Поэтому Not превращает это значение в 0 и обратно.
Любые целые числа (отличные от 0 и -1) оператор Not превращает в другие целые числа.
При этом для всех числовых типов кроме Byte (здесь FF равно 255) самый старший бит определяет - положительное число или отрицательное.Все это поняла. И, надеюсь, усвоила.
И пояснения -Практикант- — также.
Спасибо всем.
Про старший бит тоже уже начала вспоминать. Надо бы Джермейна полистать.)))

Но вот осталась "закавыка":
https://msdn.microsoft.com/ru-ru/library/office/gg264614.aspx msdn.microsoft.com Справочник по языку VBA для Office > Константы компилятораКонстантаЗначениеОписаниеVba6TrueУказывает, что в качестве среды разработки используется Visual Basic для приложений, совместимый с версией 6.0.Vba6FalseУказывает, что средой разработки не является Visual Basic для приложений, совместимый с версией 6.0.Vba7TrueУказывает, что в качестве среды разработки используется Visual Basic для приложений, совместимый с версией 7.0.Vba7FalseУказывает, что средой разработки не является Visual Basic для приложений, совместимый с версией 7.0.Нет пояснения, что в данном случае True не -1, а 1.
Отсюда и все дальнейшие нестыковки, как мне кажется.

Но все на пользу — теперь буду знать тонкости If и Not.)))
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208587
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
__MichelleТо есть, применение Not к выражению, трактуемому как True, должно давать False.
Нет. Применение Not к настоящему True должно давать False. А только после этого результат трактуется.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208696
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч__MichelleТо есть, применение Not к выражению, трактуемому как True, должно давать False.
Нет. Применение Not к настоящему True должно давать False. А только после этого результат трактуется.То есть, Not корректно применяется только к Boolean.
Числа, отличные от 0, -1, Null, следует предварительно преобразовать в "истинное" True.
Код: vbnet
1.
2.
3.
4.
? 10,        Not 10
  10         -11 
? CBool(10), Not Cbool(10)
  True       False

И в справке msdn.microsoft.com "Справочник по языку VBA для Office > Константы компилятора"
должно было быть уточнение, что значение True для этих констант не -1, а 1.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208730
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle..., что значение True для этих констант не -1, а 1.
:)
Зря вы так.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208735
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared__Michelle..., что значение True для этих констант не -1, а 1.
:)
Зря вы так.Почему? Разве -1? У меня получилось, что 1. Проверяла.
Код: vbnet
1.
2.
3.
#If VBA6 = True Then    ' дает False
#If VBA6 = 1 Then       ' дает True
#If VBA6 = –1 Then      ' дает False

А Вы считаете иначе?
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208742
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что получится?
Код: vbnet
1.
2.
3.
Dim v
v = VBA6
Debug.Print TypeName(v)



зы. У меня нет доступа к 2013.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208744
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получится ошибка компиляции.
Рисунок вставлять не буду, просто скопирую сообщение.
---------------------------
Microsoft Visual Basic
---------------------------
Compile error:

Variable not defined
---------------------------
ОК Справка
---------------------------

Думаю, константы эти известны только препроцессору.

2013-го у меня тоже нет. Сейчас проверяю в 2000-м.
Ноутбук с 2003-м и 2007-м доставать не хочется.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208762
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК.
Я то подозреваю что они лонг. (в 32)
Да бес с ними.

Вы неверно интерпретируете текст по ссылке.
В табличках, в колонке Значение", указано НЕ значение самой константы,
а значение-результат интерпретации ее (константы) значения в конструкции If ... Then.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208769
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В оригинале "the compiler constants are defined as follows".
Определяются, задаются,....
В заголовке Value, значение.

И на что это влияет с точки зрения моего понимания?

А в примерах там и подавно, смотрите, какие разъяснения даны.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
#If Win64 Then 
' Win64=true, Win32=true, Win16= false 
#ElseIf Win32 Then 
' Win32=true, Win16=false 
#Else 
' Win16=true 
#End If

И какому же true они, согласно этим комментариям, равны, позвольте спросить?
Обычному для VBA -1, как можно ожидать, исходя из названия справки "Справочник по языку VBA"?
Нет.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208809
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle...
[/src]И какому же true они, согласно этим комментариям, равны, позвольте спросить?
...
Никакому.
Им нет необходимости и возможности равняться True.
Keyword True имеет свое значение,
каждая из констант - свое.
Они даже разных типов данных.

То, что в комментариях они понаписали не совсем (точнее, совсем не) корректное:
' Win64=true, Win32=true, Win16= false
не дает повода предлагать не менее нелепое:
__Michelle..., что значение True для этих констант не -1, а 1

Значение Keyword True не может быть описано по-разному для разного.
Оно однажды описано и приколочено гвоздями к стенке.

Значение констант тоже описано однажды,
тоже приколочено к стенке,
и не имеет (и не может по определению иметь) особого значения "True".
:)
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208818
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredТо, что в комментариях они понаписали не совсем (точнее, совсем не) корректное:
' Win64=true, Win32=true, Win16= false
не дает повода предлагать не менее нелепое:
__Michelle..., что значение True для этих констант не -1, а 1Вовсе не на основе процитированного комментария сделан мною этот "нелепый" вывод.
А на основе нескольких проверок.
Могу согласиться лишь с тем, что формулировка этого вывода слегка "нелепая".
Правильно будет так: значение этих констант в случаях "совместимости" (для краткости так обзову) равно 1.

Насчет "приколоченности гвоздями к стенке"...
Все относительно.
В VBA True=-1, в SQL Server True=1.
Почему я не могла допустить, что для препроцессора тоже True=1,
прочитав эту справку и убедившись на опыте, что VBA6 не равно VBA-шному True?
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208823
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle... Правильно будет так: значение этих констант в случаях "совместимости" (для краткости так обзову) равно 1.
НЕ МОЖЕТ быть разных значений констант для разных случаев.
Ну не может по определению. Патамушта константы.
:)
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208832
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredНЕ МОЖЕТ быть разных значений констант для разных случаев.
Ну не может по определению. Патамушта константы.
:)Да-да.)))
Только на рисунке с табличкой, который Вы приводите,
для констант VBA6 и VBA7 по две строки, с двумя разными значениями для каждой.
Конечно, в "несовместимых" случаях они просто неизвестны препроцессору и потому результат False.
Но, тем не менее...

И потом, если я говорю о значении, принимаемом константой в таком-то случае,
разве это означает, что я собираюсь приписывать ей другие значения для других случаев?
Нет.
В случае "совместимости" константа знакома препроцессору и имеет значение 1,
в случае же "несовместимости" константа не знакома препроцессору и попытка ее проанализировать через #If дает False.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208836
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle... Только на рисунке с табличкой, который Вы приводите,
для констант VBA6 и VBA7 по две строки, с двумя разными значениями для каждой. ...
Разными НЕ значениями константы.
С разными результатами интерпретации части condition стайтмента If...Then...Else
для разных версий платформ.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208837
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle... И потом, если я говорю о значении, принимаемом константой в таком-то случае, ...
В 31 раз:
НЕ МОЖЕТ константа "принимать" значение.
Оно (значение константы) один раз описано при описании самой константы,
и приколочено к стене гвоздями соткой.
И не зависит ни от каких случаев. От слова "Вообще".
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208839
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, Боги....

Да.
Знала ведь, что это "уязвимая"формулировка, но надеялась, что контекст выручит.
Хорошо, не "о значении, принимаемом константой ...", а
"о значении, имманентно присущем константе и проявляющемся в таком-то случае".)))
Это значение единица.

А теперь той же монетой.)))
"..... части condition стайтмента If...Then...Else..."
Эти константы не могут участвовать в таком If, только в #If....#Then.....#Else.
)))
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39208990
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle..., а
"о значении, имманентно присущем константе и проявляющемся в таком-то случае".)))
...
Ну да, ну да.
В полнолуние проявляется имманентно присущее значение констант.
:)

__Michelle... Эти константы не могут участвовать в таком If, только в #If....#Then.....#Else...
И ...?
От наличия решеток If...Then...Else перестал быть If...Then...Else?
Или у него пропала часть condition?
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39209096
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Predeclared__Michelle..., а
"о значении, имманентно присущем константе и проявляющемся в таком-то случае".)))
...
Ну да, ну да.
В полнолуние проявляется имманентно присущее значение констант.
:)Нет. Не обязательно в полнолуние. Фаза Луны значения не имеет.
Я ведь уже писала в 19021105 про эту VBA6В случае "совместимости" константа знакома препроцессору и имеет значение 1,
в случае же "несовместимости" константа не знакома препроцессору и попытка ее проанализировать через #If дает False.
2. Predeclared__Michelle... Эти константы не могут участвовать в таком If, только в #If....#Then.....#Else...
И ...?
От наличия решеток If...Then...Else перестал быть If...Then...Else?
Или у него пропала часть condition?Нет. Не перестает и не пропадает. Суть не в этом.
У Вас было про "разные результаты интерпретации части condition стайтмента If...Then...Else для разных версий платформ.".
Но для этого варианта If...Then...Else нет зависимости результата интерпретации части condition от версии платформы.

3.
Снова про "гвозди сотка". (Nine Inch Nails ???)
То есть, Вы утверждаете, что один и тот же код всегда имеет дело с одним и тем же значением используемой константы условной компиляции?
Но ведь смысл условной компиляции в том и состоит, чтобы, в зависимости от текущего значения этой константы
либо компилировать, либо игнорировать некоторый участок кода.
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39209229
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle..., в зависимости от текущего значения этой константы ...

Все, я больше не могу, и не хочу в 32 раз писать одну и ту же прописанную в букваре истину.

Michelle, завязывайте бухать уже!
:)
...
Рейтинг: 0 / 0
Константы условной компиляции
    #39209238
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared__Michelle..., в зависимости от текущего значения этой константы ...

Все, я больше не могу, и не хочу в 32 раз писать одну и ту же прописанную в букваре истину.

Michelle, завязывайте бухать уже!
:)Вместо 32-кратной писанины лучше хотя бы раз внимательно прочитать мои сообщения.

Думаете, очень остроумно завершили навязанную мне Вами дискуссию?
А мне кажется, грубо и неуместно.

Но, действительно, достаточно.
...
Рейтинг: 0 / 0
47 сообщений из 47, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Константы условной компиляции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]