据我所了解,您希望每次加载表单时动态设置“ControlTipText”属性。由于您在评论中指出该应用程序旨在用于平板设备,因此您可能希望在打开表单时限制处理器负载。您可以通过将“ControlTipText”属性与表单设计一起保存来实现这一点。
请按以下步骤使用您的表单名称:
SetControlTipText "YourFormName"
以下是步骤。在有限测试中没有发现问题。它为复选框、组合框、列表框和文本框设置了ControlTipText
。更改第一个Case
行以定位不同的控件集。
Public Sub SetControlTipText(ByVal pFormName As String)
Dim ctl As Control
Dim db As DAO.Database
Dim frm As Form
Dim rs As DAO.Recordset
DoCmd.OpenForm pFormName, acDesign
Set frm = Forms(pFormName)
If Len(frm.RecordSource) > 0 Then
Set db = CurrentDb
Set rs = db.OpenRecordset(frm.RecordSource)
For Each ctl In frm.Controls
Select Case ctl.ControlType
Case acCheckBox, acComboBox, acListBox, acTextBox
If Len(ctl.ControlSource) > 0 _
And Not ctl.ControlSource Like "=*" Then
ctl.ControlTipText = _
GetDescription(rs.Fields(ctl.ControlSource))
End If
Case Else
' pass '
End Select
Next ctl
rs.Close
End If
Set ctl = Nothing
Set rs = Nothing
Set db = Nothing
Set frm = Nothing
DoCmd.Close acForm, pFormName, acSaveYes
End Sub
SetControlTipText
调用此函数:
Public Function GetDescription(ByRef pObject As Object) As String
Dim strReturn As String
On Error GoTo ErrorHandler
strReturn = pObject.Properties("Description")
ExitHere:
GetDescription = strReturn
On Error GoTo 0
Exit Function
ErrorHandler:
strReturn = vbNullString ' make it explicit '
GoTo ExitHere
End Function
如果未绑定窗体,则该SetControlTipText
过程将被忽略。如果绑定字段的控件源没有分配Description
属性,则其ControlTipText
将设置为空字符串。
此方法将要求您仅为窗体运行一次该过程,而不是每次加载窗体时运行其他某些过程。如果以后更改表单记录源字段的任何Description
属性,则可以重新运行SetControlTipText
以更新ControlTipText
。
或者,在发布应用程序的新版本之前,您可以为所有应用程序窗体运行该过程。
Dim frm As Object
For Each frm in CurrentProject.AllForms
SetControlTipText frm.Name
Next frm