我环顾四周,找到了一些有关如何从字段的“描述”框中获取描述的VBA代码,但没有找到如何在表单属性中使用该代码的VBA代码。
我希望有一个ControlTip出现,该字段的Description从数据库的Description中带入,而不必重写所有描述;我希望可以复制粘贴一些可以添加到所有控件提示的代码吗?
有点像(但显然不是)
ControlTipText: Me.ThisControl.ThisControlFieldDescription
任何人都知道代码,或者即使有代码?
编辑:
description = Forms("frmTrials").Controls("txtBox").StatusBarText
MsgBox description
上面的作品显示了状态栏文本。但是,我想用事件表单填充“frmTrials”,并用当前事件控件填充“txtBox”。这样,当控件变为事件状态时,我可以将StatusBarText放入“描述框”文本字段(或控件提示等)中。我试过了
description = Forms(Me).Controls(Me.ActiveControl).StatusBarText
只是把错误扔给了我。
最佳答案
据我所知,您想在每次加载表单时动态设置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
过程将忽略未绑定(bind)的形式。如果绑定(bind)字段的控件源未分配Description
属性,则其ControlTipText
将设置为空字符串。这种方法将要求您为表单运行一次该过程,而不是每次加载表单时都运行其他过程。如果以后更改了表单的任何记录源字段的
Description
属性,则可以重新运行SetControlTipText
以更新ControlTipText
。或者,作为准备发布新版本应用程序的一部分,您可以对所有应用程序表单运行该过程。
Dim frm As Object
For Each frm in CurrentProject.AllForms
SetControlTipText frm.Name
Next frm