Есть ли способ изменить свойства диалоговой формы Ms Access при открытии? - PullRequest
0 голосов
/ 24 февраля 2020

Вместо использования msgBox я хочу создать My msgBox с помощью формы "frmMsg". Форма "frmMsg" имеет буксирное дно (Ok и No) и метку (lblMsg) для сообщения показа. Свойство "frmMsg": всплывающее окно = да, модальное = да.

Моя функция для открытой формы - MsgInfo:

Public Function MsgInfo(Optional msg As String = "Are You Ok?", _
 Optional msgCaption As String = "Warning" ) As Boolean
    MsgInfo = False
    DoCmd.OpenForm "frmMsg"
    Form_frmMsg.Caption = msgCaption    ' Set Caption of Form
    Form_frmMsg.lblMsg.Caption = msg    ' Set Message of Form
    MsgInfo = MsgInfoResult     ' MsgInfoResult is Public Variable to store MsgInfo Result (Ok Bottom(True) or No Bottom(False) )
End Function

Я использовал это в другой форме, пример для удаления клиента в клиенте Список (Удалить снизу):

Private Sub btnDelete_Click()
    DoCmd.SetWarnings False

    If MsgInfo("Are You Sure Delete Customer?", , "Delete Customer!") = True Then
    ' Run SQL for Delete Customer
        Dim sqlDelete As String
        sqlDelete = "DELETE tblCustomer.*, tblCustomer.RowId " & _
                           "FROM tblCustomer " & _
                            "WHERE tblCustomer.RowId=[Forms]![frmCustomerList]![frmCustomerListSub]![RowId]"
         DoCmd.RunSQL sqlDelete
         Form_frmCustomerList.frmCustomerListSub.Requery
    End If
    DoCmd.SetWarnings True
End Sub

Моя проблема после открытия формы MsgInfo Перед тем, как пользователь ответит, выполняются команды Next (Sql).

Чтобы решить проблему, Я изменил AcWindowsMode в функции MsgInfo:

    DoCmd.OpenForm "frmMsg"

на

    DoCmd.OpenForm "frmMsg", , , , , acDialog

проблема решена, но возникла другая проблема. Следующие команды не выполняются:

    Form_frmMsg.Caption = msgCaption    ' Set Caption of Form
    Form_frmMsg.lblMsg.Caption = msg    ' Set Message of Form
    MsgInfo = MsgInfoResult     ' MsgInfoResult is Public Variable 

, пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 24 февраля 2020

Я не являюсь экспертом в VBA или любом другом языке программирования и не являюсь программистом по профессии. Но я имел честное отношение к работе с языками программирования в качестве хобби.

В VBA любой код после ,,,,, acDialog не может быть запущен, пока форма не будет закрыта, так что вам нужно найти способ передать сообщения куда-нибудь и получить форму Получить его.

Создать модуль для передачи сообщения из функции в форму

'a Module named Module_gVar

Public MessageHeader as String 'Optional A Separate Text Box For a Header
Public MessageBody as String 'Main Body
Public MessageTitle as String 'Caption of the Form
Public MessageReturn as Boolean

Это функция для вызова окна сообщения и получения простого истинного или ложного возврата

'Function To Call the MessageBox
Public Function CallMessageBox ( _
Optional msgHeader as string , _
Optional msgBody as string , _
Optional msgTitle as string)

Module_gVar.MessageTitle = msgTitle
Module_gVar.MessageHeader = msgHeader
Module_gVar.MessageBody = msgBody

DoCmd.OpenForm "frmMessage",,,,,acDialog

CallMessageBox = Module_gVar.MessageReturn
'You can have the CleanUp on a Separate Function
'Since it's not a Procedure Variable it Isn't cleaned when it goes out of scope
Module_gVar.MessageTitle = ""
Module_gVar.MessageBody = ""
Module_gVar.MessageHeader = ""
Module_gVar.Return = False

End Function

Теперь для самой формы.

'Retrieve the Strings
Private Sub Form_Current()

Me.[YourHeaderTextBox] = Module_gVar.MessageHeader
Me.[YourBodyTextBox] = Module_gVar.MessageBody
Me.Caption = Module_gVar.MessageTitle

End Sub

'A Button to Return a Value

Private Sub cmdYes_Click() ' Yes button

  Module_gVar.MessageReturn = True
  DoCmd.Close acForm,"frmMessage",acSaveNo

End Sub

Private Sub cmdNo_Click() ' No Button
  Module_gVar.MessageReturn = False
  Docmd.Close acForm,"frmMessage",acSaveNo

End Sub

С этого момента вы можете оптимизировать код, но это основа c структура. Я рекомендую создать модуль класса, в котором вы можете получать строки, входные строки и формы вызова.

...