我想创建一个类模块,它将作为一个全局处理程序,当有人点击我在窗体中的六十个文本框中的一个时。 Th文本框代表本周显示信息的计时卡,包括时钟输入,计时输出,午餐开始,结束,持续时间,每周七天内每天的总时数。当某人在一天内点击任何一个盒子时,所有盒子都会解锁并启用,以便用户可以编辑它们中的信息。全球点击事件处理程序(WithEvents)
在网络中寻找全局点击事件的解决方案后,我发现我可以创建一个类模块来处理事件,而无需为每个调用分离函数来处理事件的单个文本框创建单击事件。我遇到的问题是我的课程模块似乎没有处理我的活动,并想知道是否有人可以为我的问题提出解决方案。仅供参考,我所有的文本框和锁定和禁用,以防止数据损坏。下面是我的代码:
''# Class module
Option Compare Database
Option Explicit
Public WithEvents TC_txtbox As TextBox
''# Set the textbox so that its events will be handled
Public Property Set TextBox(ByVal m_tcTxtBox As TextBox)
TC_txtbox = m_tcTxtBox
End Property
''# Handle and onClick event of the
Private Sub TC_txtbox_Click()
''# Find out the controls that where clikck
Debug.Print Form_TimeCard.ActiveControl.Name
Dim ctl As Control
For Each ctl In access.Forms.Controls
Debug.Print ctl.Name
Next ctl
End Sub
表单代码
Option Compare Database
Option Explicit
''# Global Variables
Public clk_inout As Boolean
Public settings
Public weekDict
Public weekOf As Variant
Public curDay As Variant
Public txtBxCollection As Collection
''# Event Handler for when the form opens
Private Sub Form_Open(Cancel As Integer)
''# Configure varaibles
Me.TimerInterval = 60000 ''# 10 sec Interval
weekOf = getFirstDayofWeek(Date)
curDay = Date
Set weekDict = CreateObject("Scripting.Dictionary")
Set settings = CreateObject("Scripting.Dictionary")
Set txtBxCollection = New Collection
''# Load Time Card Data
Call initSettings
''# Debug.Print "Work Day Goal " & settings.Item("Work_day_goal_hrs")
Call initDict
Call initTextBoxEventHandler
Debug.Print "Collection count " & txtBxCollection.Count
Call loadDates(Date)
Call clearDay
Call selectDay(Date)
Call loadWeeksData(weekOf)
Dim ctl As Control
Set ctl = weekDict.Item(Weekday(curDay)).Item("In")
If IsDate(ctl.Value) And (Not ctl.Value = "") Then
Me.but_clk_inout.Caption = "Clock Out"
Me.but_lunch.Visible = True
clk_inout = False
Else
Me.but_clk_inout.Caption = "Clock In"
Me.but_lunch.Visible = False
clk_inout = True
End If
''# Debug.Print "Work Day Goal " & settings.Item("Salary")
End Sub
Public Sub initTextBoxEventHandler()
Dim eventHandler As TextBoxEventHandler
Set eventHandler = New TextBoxEventHandler
Debug.Print "Collection count " & txtBxCollection.Count
Set eventHandler.TextBox = Me.txt_F_in
txtBxCollection.Add eventHandler
Debug.Print "Collection count " & txtBxCollection.Count
End Sub
我想出了我在设置文本框的类模块中的问题我忘了添加“TC_txtbox.OnClick =”[Event Procedure]“” 如果未在您想要处理的事件的属性中声明[事件过程],则在我的扩展文本框中,VBA不会触发自定义处理程序 – Talguy 2010-08-06 19:14:55