如何根据布尔字段显示多个字符串值

时间:2019-03-25 12:43:02

标签: ms-access access-vba

我有一个报告,其中提取联系人信息(姓名,地址等)。每个联系人可以与一个或多个县关联。应用程序的设计方式,每个县都是一个是/否字段。其中大约有70个。

为了避免使这份报告变得笨拙,而不是向其中添加70个字段,我想为每个适用县(布尔值为true)设置一个用逗号分隔的字符串值列表的文本字段。

我以前做过IIF条件格式。

IIf([County]="True", "CountyName", "")

但是我只以1对1的方式完成它们(一个条件,一个字段,一个文本框)。如何在70个字段中将70个条件应用于一个文本框?

编辑: 经过进一步的讨论(如下),听起来我需要一个自定义的VBA函数,该函数循环遍历字段并创建条件值字符串。

我是VBA新手。我非常感谢您提供帮助,该功能可以循环遍历记录中的适用县并创建以逗号分隔的列表。

1 个答案:

答案 0 :(得分:2)

此示例假定仅有YesNo字段是“大约70”个县字段。过程可以在文本框的报表模块和调用函数中,也可以在常规模块中,并可以从任何地方调用:MakeList([ID])。在文本框中,在表达式前加上=号。

Function MakeList(intID As Integer) As String
Dim rs As DAO.Recordset
Dim strList As String
Dim x As Integer
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Contacts WHERE ID=" & intID)
For x = 0 To rs.Fields.Count - 1
    If rs(x).Type = dbBoolean Then
        If rs(x) = True Then strList = strList & rs(x).Name & ","
    End If
Next
If strList <> "" Then MakeList = Left(strList, Len(strList) - 1)
rs.Close
Set rs = Nothing
End Function

另一种方法是扩展If Then条件语句以仅按名称排除字段。另一种是按索引引用字段。如果所有县域都说索引10-80,则可以消除For x = 10 To 80和布尔类型的测试。索引以0开头,因此第一个字段为索引0。使用*通配符时,字段将按照表设计中列出的顺序拉出。

通过构建仅包含ID和County字段的查询对象并保存它,然后打开该查询的记录集(或将很长的语句复制/粘贴到VBA中)来提高性能。使用索引来引用字段。