【发布时间】: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 关键字,并指定几种不同的数据类型吗?”