【问题标题】:Assigning a tag to multiple controls, of a given type, at once一次将标签分配给给定类型的多个控件
【发布时间】:2017-05-10 14:04:50
【问题描述】:

我在 Microsoft Access 中有一个数据库,我为其设计了一个前端。大约有 35 个表单/子表单,因此有数百个控件。我对整个前端都有一个审计结构,但它需要为每个文本框控件添加一个标签。

有没有简单的方法来做到这一点?否则,这将是非常手动、乏味和耗时的。我宁愿编写一些代码来自动化为所有文本框控件设置标签的过程。

【问题讨论】:

  • 所有控件的标签都只是一个类似“tag_name”的字符串?
  • 代码可以循环浏览Forms集合,在设计视图中打开,循环浏览Controls集合,设置Tag属性,关闭并保存表单。您想为所有控件(标签、子表单、线条等)设置标签吗?当您开发有问题的代码时,请发布问题。这是否只是“一点代码”和更容易取决于您的编程技能。像 Rick Fisher 的 Find and Replace 这样的第三方工具或许可以完成。成本约 35 美元。

标签: forms ms-access vba


【解决方案1】:

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

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 更改控件不会持续存在查看)。

【讨论】:

    【解决方案2】:

    循环遍历AllForms,在设计模式下打开每个Form,为所有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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      相关资源
      最近更新 更多