0

以前に Access で作成したPrivate WithEvents frmFormulary As Formプロパティ セットを介してフォーム オブジェクトを受け取るフォーム タイプのプライベート変数を持つクラスを作成しました。Public Property Set Formulary(frmForm As Form)このクラスのオブジェクトをインスタンス化するとき、Access で既に作成され、実際には閉じられているこのフォームをこのオブジェクトに渡し、このフォームをクラスのプライベート変数に保存しDoCmd.OpenForm "formName"ます。それを可能にしようとしてPublic Sub ShowForm()、命令でクラス内に Sub を作成しましたがfrmFormulary.Visible = True、失敗しました。このメソッドを実行すると、アプリケーションは単に停止します。DoCmd.OpenForm "formName"パラメータで渡されたフォームオブジェクト自体を使用せずにこのフォームをロードするにはどうすればよいですか?

4

1 に答える 1

0

リクエストに応じて、サンプル コードを見つけてください。

これはクラス clsForm コードです:

----------------------------------------------------------------------------------------
Option Compare Database
Option Explicit

Private WithEvents frmFormulary As Form

Public Event OpenForm(Cancel As Integer)
Public Event LoadForm()
Public Event UnloadForm(Cancel As Integer)
Public Event CloseForm()

Public Property Set Formulary(frmForm As Form)
    Set frmFormulary = frmForm

    frmFormulary.OnOpen = "[Event Procedure]"
    frmFormulary.OnLoad = "[Event Procedure]"
    frmFormulary.OnUnload = "[Event Procedure]"
    frmFormulary.OnClose = "[Event Procedure]"
End Property

Public Sub ShowForm()
    frmFormulary.Visible = True
End Sub

Private Sub frmFormulary_Open(Cancel As Integer)
    RaiseEvent OpenForm(Cancel)
    MsgBox "Event Open from clsFormulary class"
End Sub

Private Sub frmFormulary_Load()
    RaiseEvent LoadForm
End Sub

Private Sub frmFormulary_Unload(Cancel As Integer)
    RaiseEvent UnloadForm(Cancel)
End Sub

Private Sub frmFormulary_Close()
    RaiseEvent CloseForm
End Sub

Private Sub Class_Terminate()
    Set frmFormulary = Nothing
End Sub
----------------------------------------------------------------------------------------

これはフォームコードです:

----------------------------------------------------------------------------------------
Option Compare Database
Option Explicit

Private Sub btnTeste_Click()
    On Error GoTo TreatError

    Dim objScreen As clsFormulary

    Set objScreen = New clsFormulary

    objScreen.Formulary (Application.CurrentProject.AllForms("frmScreenTest"))
    objScreen.ShowForm

ExitError:
    'Set objScreen = Nothing
    Exit Sub
TreatError:
    Resume ExitError
End Sub
----------------------------------------------------------------------------------------

ありがとう。

于 2013-08-21T18:35:24.377 に答える