访问 VBA - 遍历报表元素/属性

Posted

技术标签:

【中文标题】访问 VBA - 遍历报表元素/属性【英文标题】:Access VBA - Iterate through report elements/properties 【发布时间】:2016-09-02 15:14:22 【问题描述】:

我正在寻找一种方法来迭代 Access VBA 中的所有报表元素和属性。我的主要目标是检查元素(可能是文本框和/或标签)是否包含某个字符串,然后替换该字符串,输出报告等。我知道如何检查和替换字符串并输出报告,但我找不到一种方法来遍历单个报表元素来检查它们的属性。有没有办法做到这一点?谢谢!

【问题讨论】:

更新答案以包括标签标题和文本框值属性 【参考方案1】:

在 Access 中 - 您引用的元素称为控件。

您可以循环遍历报表的所有控件 - 如果您想更改它们的标题(用于标签)或值(未绑定的文本框) - 您可以使用循环根据控件类型有条件地检查属性中的字符串

这样的事情可能对你有用:

编辑 - 将 rpt 变量更改为 AccessObject

Public Sub ChangeReportStrings(oldString as String, newString as String)
   Dim rpt as AccessObject
   Dim ctl as Control

   For Each rpt in currentProject.AllReports
       DoCmd.OpenReport rpt.Name, acViewDesign 
       For Each ctl in rpt.Controls
           Select Case ctl.ControlType
               Case acLabel
                   ' Replace Label Caption old string with new string
                    ctl.Caption = Replace(ctl.Caption, oldString , newString)
               Case acTextBox
                   ' Probably should check to see if ControlSource is filled first
                   ' Replace ctl.Value old String with new String
                   ctl.Value = Replace(ctl.Value, oldString , newString)

           End Select
       Next ctl
       DoCmd.Close acReport, rpt.Name, acSaveYes
   Next rpt

End Sub

【讨论】:

谢谢。对于“currentproject.allreports 中的每个 rpt”,它给我一个类型不匹配的错误。我已像您一样将 rpt 声明为 Report 。有什么建议吗? 嗯 - 好皮卡。看起来它应该是一个 AccessObject。将声明更改为 AccessObject,如 Dim rpt as AccessObject (根据 msdn.microsoft.com/en-us/library/office/ff194322.aspx 的文档)我修改了我的答案 - 看看现在是否有效 我搞定了。我必须使用 AccessObject 进行迭代,但要更改控件,我需要将其放入 Report 对象中。 很好 - 感谢更新。让我知道是否应该通过将报告设置为访问对象来修改上述代码

以上是关于访问 VBA - 遍历报表元素/属性的主要内容,如果未能解决你的问题,请参考以下文章

vba十万刚数据遍历怎么快

数组中的元素属性有值,但遍历出来的时候该属性值却为null?

VBA编程,遍历文件夹下的excel表,对每个excel表遍历做一些操作

访问中的 Vba 代码循环遍历文件夹中的所有 excel 文件,打开、保存和关闭它们

关于Visio的vba操作,遍历目录,对所有vsd文件操作,导入excel文件

uiautomator怎么遍历超过一屏的元素