我有一个表格,我在其中创建了一些复选框。这些复选框是动态创建的,每次用户打开表单时,它们的编号可能不同。虽然我的事件监听器完全按照我想要的方式工作,但当我按“X”按钮关闭表单时,MS Access崩溃了。它没有挂起,它崩溃了。我已经尝试过反编译和重新编译,我也尝试了其他步骤,但没有解决问题。当我评论负责事件处理程序的代码行时,崩溃停止。
以下是我的课程模块的代码。类模块的名称是EventClass。
Option Compare Database
Public WithEvents ct As Access.CheckBox
Public Sub ct_Click()
MsgBox ct.Name & "pressed"
End Sub
以下是表格的代码:
Option Compare Database
Private listenerCollection As New Collection
Private Sub Form_Load()
DoCmd.SetWarnings False
Dim listener As EventClass
For Each ctrl In Forms("test").TestTab.Pages(0).Controls
If (TypeName(ctrl) = "CheckBox") Then
'the created checkboxes should not be checked by default
ctrl.Value = 0
Set listener = New EventClass
Set listener.ct = ctrl
listener.ct.OnClick = "[Event Procedure]"
listenerCollection.Add listener
End If
Next
End Sub
以下是制作复选框的代码(它属于另一种形式,在制作控件之前关闭并且导致问题的表单出现):
DoCmd.Close
DoCmd.OpenForm "test", acDesign, , , acFormEdit, acHidden
'delete the previously created controls
again:
For Each ctrl In Forms("test").TestTab.Pages(0).Controls
DeleteControl "test", ctrl.Name
Next
'ensure that all the controls have been deleted
If (Forms("test").TestTab.Pages(0).Controls.Count > 0) Then GoTo again
Dim q As CheckBox
Dim usr As Label
Dim db As Database
Dim rs As Recordset
Top_ = 500
Left_ = 1000
'create new controls
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT USERNAME FROM T_USERS", dbOpenSnapshot)
With rs
Do While Not .EOF
Set usr = CreateControl("test", acLabel, acDetail, "Page1", , 0, Top_, 1100, 1000)
usr.Caption = rs.Fields("USERNAME")
Set q = CreateControl("test", acCheckBox, acDetail, "Page1", , 1500, Top_, 200, 200)
Top_ = Top_ + 500
Set q = Nothing
Set usr = Nothing
.MoveNext
Loop
.Close
End With
Set rs = Nothing
Set db = Nothing
'and here,the form which causes the problem shows up
DoCmd.OpenForm "test"
崩溃信息:
问题签名:
问题事件名称:APPCRASH
应用程序名称:MSACCESS.EXE
应用版本:15.0.4665.1000
申请时间戳:54339a95
故障模块名称:MSACCESS.EXE
故障模块版本:15.0.4665.1000
故障模块时间戳:54339a95
例外代码:c0000005
异常偏移:00000000003796f5
操作系统版本:6.1.7601.2.1.0.256.48
有时,应用程序事件名称显示为BEX64
这个问题已经开始让我非常沮丧,因为在我搜索的任何地方都没有适当的解决方案。 代码反编译不起作用,DEP关闭不起作用,vba编辑器中的引用是可以的。 我真的不知道该怎么做。
答案 0 :(得分:1)
我实际上没有设法解决问题,但似乎它与表单的“X”按钮有关。 所以我做了以下。我禁用了X按钮并在表单中插入了一个自定义按钮。 下面你可以看到它的“_Click”子。
Private Sub CloseButton_Click()
DoCmd.Close
End Sub
崩溃停止了。