据我了解,您希望在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