#vba #ms-access-2010
#vba #ms-access-2010
Вопрос:
Обновите 15.03.19, чтобы добавить новый код объявления в раздел общих объявлений:
Option Compare Database
' Access global variables definition
Global bInReportOpenEvent As Boolean
Option Explicit
Я получаю сообщение об ошибке:
«Выражение при открытии, которое вы ввели в качестве параметра свойства события, выдало следующую ошибку: константы, строки фиксированной длины, массивы, пользовательские типы и операторы Declare не допускаются в качестве общедоступных членов объектных модулей».
Обновите 15.03.19, чтобы добавить код объявления. По-прежнему значение bInReportOpenEvent теряется при вызове диалоговой формы.
Option Compare Database
Dim bInReportOpenEvent As Boolean
Function IsLoaded(strNme As String) As Boolean
IsLoaded = CurrentProject.AllForms(strNme).IsLoaded
End Function
Я создаю отчет Access, который вызывает диалоговую форму для запроса конкретной записи для отображения в отчете. Отчет использует запрос в качестве источника записи. Я устанавливаю глобальное поле в модуле открытия отчета, чтобы диалоговая форма не могла быть выполнена самостоятельно. Если диалоговая форма вызвана, а глобальное поле, заданное отчетом, не задано, то я хочу выйти с сообщением. Мой модуль открытия отчета выглядит следующим образом:
Public Sub Report_Open(Cancel As Integer)
Dim outCome1 As String
' Set public variable to true to indicate that the report
' is in the Open event
bInReportOpenEvent = True
MsgBox (bInReportOpenEvent)
' Open Appt Query Dialog
DoCmd.OpenForm "craid CMM Client Report Dialog", , , , , acDialog
' Cancel Report if User Clicked the Cancel Button
If IsLoaded("craid CMM Client Report Dialog") = False Then Cancel = True
MsgBox ("Is Dialog Form Loaded?")
MsgBox (IsLoaded("craid CMM Client Report Dialog"))
'outCome1 = (Reports("CMM Client Status Report").Controls("googleoutcome").Value)
'MsgBox (outCome1)
' Set public variable to false to indicate that the
' Open event is completed
bInReportOpenEvent = False
End Sub
Моя форма, открытая для моей диалоговой формы, выглядит следующим образом:
Private Sub Form_Open(Cancel As Integer)
If Not bInReportOpenEvent Then
MsgBox ("In Not bInReportOpenEvent Logic")
MsgBox (bInReportOpenEvent)
' If we're not called from the report
MsgBox "For Use From CMM Client Status Report Only", _
vbOKOnly
Cancel = True
End If
End Sub
Есть идеи о том, почему? Приветствуется любая помощь.
Комментарии:
1. Есть ли у вас
Option Explicit
во всех ваших модулях кода? Где и какbInReportOpenEvent
объявлена?2. Нет, я этого не делаю. Я не объявляю bInReportOpenEvent. Как я должен ее объявить?
3. Если вы добавите
Option Explicit
, то вы получите предупреждения о подобных вещах, вместо того, чтобы ваш код тихо завершался сбоем… Вам нужноDim bInReportOpenEvent As Boolean
в модуле вне какого-либо подразделения или функции.4. Я добавил объявление сразу после опции Сравнить базу данных (Общие) и обновил свой пост, чтобы добавить этот код. Есть ли в модуле какой-либо код, включающий функцию, вспомогательный элемент или общий?
5. Вы добавили
Option Explicit
?
Ответ №1:
На мой вопрос был дан ответ. Решение состоит в том, чтобы поместить объявление глобальной переменной в модуль кода VBA.