我环顾四周,找到了一些有关如何从字段的“描述”框中获取描述的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

10-04 21:02