【问题标题】:Creating an array in VBA based on two array fields基于两个数组字段在 VBA 中创建数组
【发布时间】:2018-10-16 20:27:59
【问题描述】:

我有几个带有查找字段的表,它们指向第三个表中的相同数据,并且两个字段都可以选择多个值。用户可以从每个表中选择一条记录,我需要能够在 VBA 中分离出重叠的值。

为此,我尝试在 VBA 中创建第三个数组,将结果值转储到该数组中,但出现类型不匹配错误。我似乎找不到发生这种情况的原因。代码在不失去意义的情况下尽可能减少,如下所示:

Function SetEnabledColours()
'Indexes for arrays of available colours
Dim IndA As Long, IndG As Long, IndO As Long
'Arrays of available colour options
Dim AuthorCol, GenreCol, OverlapCol()

AuthorCol = DLookup("[AllowedColours]", "tblAuthor", "[Author]= '" & cmbAuthor & "'")
GenreCol = DLookup("[AllowedColours]", "tblGenre", "[Genre]= '" & cmbGenre & "'")

'Separate overlapped options
'Cycle through AuthorCol
For IndA = LBound(AuthorCol) To UBound(AuthorCol)

[然后我得到错误]

    'Check each GenreCol against this AuthorCol
    For IndG = LBound(GenreCol) To UBound(GenreCol)
        If GenreCol(IndG) = AuthorCol(IndA) Then
            'Add to OverlapCol(CountO)
            ReDim Preserve OverlapCol(IndO)
            OverlapCol(IndO) = GenreCol(IndG)
            IndO = IndO + 1
            'Skip over to next AuthorCol
            GoTo Escape1
        End If
    Next IndG
Escape1:
Next IndA

最初我将索引调暗为整数,但后来我意识到这是因为我将数组视为范围。我知道这种类型的数据存储为数组而不是范围。

Erik 的回答将我指向数组:Multi-select Lookup Field data to VBA

这就是我创建重叠数组的基础:https://www.experts-exchange.com/questions/28530517/remove-array-element-in-access-vba.html

【问题讨论】:

  • DLookup 不创建数组,请阅读有关此函数的帮助。所以,所有功能都不起作用。改为使用记录集。应该重写整个代码。并且Dim IndA, IndG, IndO As Long 还创建了两个变体(IndA、IndG)和一个 Long(IndO),而不是 3 个 Long 变量。
  • 一个 SQL 查询应该可以解决您的任务。
  • @SergeyS。 - 啊。我确实知道。这是否意味着我可以Dim IndA as Long, IndG as Long, IndO as Long?至于 DLookup 创建数组,我只是使用 DLookup 来查找存储在 AllowedColours 查找中的数据,其中可以选择多个值。根据我的研究(并在这个网站上询问),我被引导相信这些数据存储为一个数组。
  • 是的,应该为每个变量指明数据类型,默认为Variant。
  • 我对那行代码的意思是“我可以在一行中声明多个变量,而不重复 Dim 关键字,并指定几种不同的数据类型吗?”

标签: arrays ms-access vba


【解决方案1】:

DLookup for multiple values field 返回一个字符串,其中包含以逗号(和一个空格)分隔的值列表,因此您应该使用Split 函数将此字符串转换为数组:

AuthorCol = Split(DLookup("[AllowedColours]", "tblAuthor", "[Author]= 'd'"), ", ")
GenreCol = Split(DLookup("[AllowedColours]", "tblGenre", "[Genre]= '" & cmbGenre & "'"), ", ")

【讨论】:

  • 是的!这几乎可行:列表中的第一个条目是正确的,但每个其他条目都从逗号后面继承了它前面的空格。只需将分隔符从“,”更改为“,”即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 2015-03-01
  • 2019-09-04
  • 1970-01-01
相关资源
最近更新 更多