Forms 一次为给定类型的多个控件分配标记

Forms 一次为给定类型的多个控件分配标记,forms,ms-access,vba,Forms,Ms Access,Vba,我在MicrosoftAccess中有一个数据库,我为它设计了一个前端。大约有35个表单/子表单,因此有数百个控件。我有一个用于整个前端的审计结构,但它需要向每个textbox控件添加一个标记 有没有一个简单的方法可以做到这一点?否则,它将是极其手工的、乏味的和耗时的。我更愿意编写一些代码来自动设置所有文本框控件的标记。您可以在一个表单中使用以下代码: Public Sub AssignTag() Dim control As Variant For Each control I

我在MicrosoftAccess中有一个数据库,我为它设计了一个前端。大约有35个表单/子表单,因此有数百个控件。我有一个用于整个前端的审计结构,但它需要向每个textbox控件添加一个标记


有没有一个简单的方法可以做到这一点?否则,它将是极其手工的、乏味的和耗时的。我更愿意编写一些代码来自动设置所有文本框控件的标记。

您可以在一个表单中使用以下代码:

Public Sub AssignTag()
    Dim control As Variant
    For Each control In Me.Controls
        If control.ControlType = acTextBox Then
            control.Tag = "MyTag"
        End If
    Next
End Sub

然后您必须在布局视图中打开表单,更改某些内容,保存表单,并可能将其更改回来,以使更改保持不变(使用VBA更改控件不会持续,除非您在布局视图中进行其他更改)。

所有表单
中循环,在设计模式下打开每个
表单
,将标签设置为所有
TextBox
控件,保存并退出

Public Sub SetControlsTag()
    On Error GoTo ErrProc

    Dim obj As AccessObject, frm As Form, ctl As Control

    For Each obj In CurrentProject.AllForms

        'Open in design mode
        DoCmd.OpenForm CurrentProject.AllForms(obj.Name).Name, acDesign
        Set frm = Forms(obj.Name)

        'Set tags
        For Each ctl In frm.Controls
            If ctl.ControlType = acTextBox Then ctl.Tag = "Whatever..."
        Next ctl

        'Close
        DoCmd.Close acForm, frm.Name, acSaveYes
        Set frm = Nothing
    Next obj

Leave:
    Set frm = Nothing
    On Error GoTo 0
    Exit Sub

ErrProc:
    MsgBox Err.Description
    Resume Leave
End Sub

对于所有控件,标记只是一个类似“tag_name”的字符串?代码可以在窗体集合中循环、在设计视图中打开、在控件集合中循环、设置标记属性、关闭和保存窗体。是否要为所有控件(标签、子窗体、行等)设置标记?当您开发有问题的代码时,发布一个问题。这是否只是“一点代码”和更简单取决于您的编程技能。像Rick Fisher的Find and Replace这样的第三方工具或许可以实现这一目标。大约35美元。