Доступ VBA пытается ссылаться на текстовое поле из другой формы - PullRequest
1 голос
/ 16 декабря 2010

Я использую Access VBA и пытаюсь изменить существующий код, чтобы добавить всплывающее окно. Это всплывающее окно является другой формой, и когда пользователь нажимает кнопку в этой форме, я хочу заполнить текстовое поле в базовой форме. После этого всплывающее окно исчезает, а затем мне нужно получить доступ к этому значению из текстового поля в базовой форме.

Последовательность должна быть такой:
1) Базовая форма нажатия кнопки вызова модальных всплывающих окон
2) Нажмите кнопку во всплывающем окне, чтобы сохранить значение в текстовом поле базовой формы, а затем вернуть управление.
3) Базовая форма затем использует это значение, чтобы что-то сделать.

У меня есть код, но он не работает должным образом. Кто-нибудь может увидеть, чего здесь не хватает, и помочь мне исправить?

Базовая форма

Sub base()
    DoCmd.OpenForm "PaperType", , , , , acDialog

    MsgBox Me.TheAnswer           'This line gives a null error
End Sub

Всплывающая форма

Private Sub btnRolls_Click()
    'Me.Tag = 1
    Forms!ReceiptDetail_sfrm!TheAnswer = 1
    Me.Visible = False
End Sub

Private Sub btnSheets_Click()
    'Me.Tag = 4
    Forms!("ReceiptDetail_sfrm").TheAnswer = 4
    Me.Visible = False
End Sub

Ответы [ 3 ]

8 голосов
/ 17 декабря 2010

Вы можете сделать это таким образом, вам, вероятно, нужно что-то вроде:

<code></p>

<p>Private Sub btnRolls_Click()
   Forms!ReceiptDetail_sfrm!TheAnswer = 1
   Forms!ReceiptDetail_sfrm.Refresh
   Me.Visible = False
End Sub
Я делал то, что ты делаешь много раз. Я сейчас не на работе, чтобы проверить мой код в качестве примера, но это выполнимо.
4 голосов
/ 17 декабря 2010

Я склонен скрывать всплывающее окно и читать из него:

Основная форма:

Private Sub base()
   DoCmd.OpenForm "PaperType", , , , , acDialog
   'code waits for modal hide here
   Me!TheAnswer = Forms("PaperType").SomethingOnThatFormThatStoresTheValue
   DoCmd.Close acForm, "PaperType", acSaveNo
   MsgBox Me.TheAnswer
End Sub

Popup

Private Sub btnRolls_Click
   'may be hidden control
   Me.SomethingOnThatFormThatStoresTheValue = TheValueToRead
   Me.Visible = False
End Sub

Убедитесь, что либо A) Ваше всплывающее окно не может быть закрыто из самой формы, либо B) Ваш вызывающий код будет обрабатывать ошибку при попытке прочитать то, что больше не загружено (или оба).

0 голосов
/ 16 декабря 2010

Видимо, правильный ответ: «Не делай так!».Вместо того, чтобы пытаться передавать данные между формами, что является проблемой, я создал таблицу в Access, которая имеет только 1 поле в 1 записи.Затем я сохраняю значение там, используя DoCmd.RunSQL, и извлекаю его из другой формы, используя DLOOKUP ().

...