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