Моя глобальная переменная не переносится в диалоговую форму при вызове из отчета

#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.