2013-08-21 1 views
0

이전에 Access에서 만든 속성 집합 Public Property Set Formulary(frmForm As Form)을 통해 양식 개체를받는 양식 유형이 Private WithEvents frmFormulary As Form 개인 변수가있는 클래스를 만들었습니다. 이 클래스의 객체를 인스턴스화 할 때 이미이 객체에 액세스하여 실제로 닫힌이 양식을 전달하고 DoCmd.OpenForm "formName"을 사용하지 않고이 양식을로드 할 목적으로이 양식을 클래스의 개인 변수에 저장합니다. 가능한 한, frmFormulary.Visible = True 명령으로 Public Sub ShowForm() 클래스의 Sub를 만들었습니다. 실패했습니다. 이 메서드를 실행하면 응용 프로그램이 중지됩니다. DoCmd.OpenForm "formName"을 사용하지 않고이 폼을로드하려면 어떻게해야합니까? 폼 개체 자체가 매개 변수로 전달 되었습니까?매개 변수로 전달 된 폼을 VBA의 클래스 모듈에 여는 방법?

+0

응용 프로그램이 멈추었다 고 말하면 중단 점이 해당 줄에 있으면 프로그램이 아무런 동작을 수행하지 않거나 어떤 종류의 오류가 발생합니까? – Zaider

+0

코드를 게시하여 볼 수 있습니다. – Sorceri

답변

0

요청한대로 샘플 코드를 찾으십시오.

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

감사 :

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

이 양식 코드 :

는 클래스 clsForm 코드입니다.

관련 문제