Vba 将查询表中的字段名存储到动态数组MS Access中

Vba 将查询表中的字段名存储到动态数组MS Access中,vba,ms-access,Vba,Ms Access,我有一个查询qryRuleSets,它输出一个包含19个字段的表(在建议之前我不想将其保存到access表中)。我想获取字段名并将它们存储到一个数组中,以便稍后在for循环中使用该数组 为了找到查询结果中的字段数(稍后在for循环中使用),我实现了以下功能,其中字段数存储在变量numberfields- numberfields = CurrentDb.QueryDefs("qryrulesets").Fields.Count 要实际获取这些字段的名称并将其存储在数组中,我

我有一个查询
qryRuleSets
,它输出一个包含19个字段的表(在建议之前我不想将其保存到access表中)。我想获取字段名并将它们存储到一个数组中,以便稍后在for循环中使用该数组

为了找到查询结果中的字段数(稍后在for循环中使用),我实现了以下功能,其中字段数存储在变量
numberfields
-

numberfields = CurrentDb.QueryDefs("qryrulesets").Fields.Count
要实际获取这些字段的名称并将其存储在数组中,我遇到了两个问题:

一,。从查询结果中获取字段名

二,。设置一个动态数组,这样如果查询返回的表的字段数大于或小于19个,它仍然可以工作

关于我的第一个问题:

我试图按照以下链接中的步骤进行操作:但我无法理解

为了从qry结果中获取字段名,我尝试了以下方法,但我对vba/access的知识不是太多,所以即使在大量的谷歌搜索之后,也很难理解:

Dim qry As QueryDef
Dim fieldNames As QueryDef
Dim firstcol As String
    
Set fieldNames = CurrentDb.CreateQueryDef(qry.qryrulesets)

firstcol = fieldNames.field(0).Name
关于我的第二个问题:

为了在数组中存储值,我尝试了以下方法(作为测试),它可以工作,但我必须定义数组的大小。是否有一种方法可以使其成为动态的,即基于字段数的值(在上面存储在
numberfields
中):

我尝试将上面的“30”设置为一个可变值,但它不喜欢这样

任何和所有的帮助都将不胜感激。谢谢

您可以这样做:

公共函数getFieldName(ByVal QueryName作为字符串)作为字符串()
Dim查询为DAO.QueryDef
Dim FieldNames()作为字符串
将索引设置为整数
Set Query=CurrentDb.querydfs(QueryName)
ReDim字段名(0到Query.Fields.Count-1)
对于索引=LBound(字段名)到UBound(字段名)
字段名(索引)=查询.Fields(索引).Name
下一个
GetFieldNames=FieldNames()
端函数

Dim vardata()作为Variant
然后
ReDim
稍后将其删除。是的,但是当我ReDim时,我必须正确指定长度@braXyes,但您可以使用
redim Preserve
重拨任意次数-您是否阅读了有关重拨的文档?显然不是很彻底!谢谢你,我认为你每次都必须手动指定一个长度——不是这样。谢谢你@Brax使用scripting.dictionary替换数组。使用.count方法提供密钥。
Dim vardata(30) As Variant

For i = 1 To numberfields
    vardata(i) = "hello"
Next i