我需要从查询中获取字段名称并将其放入动态数组中。我相信我已经找到了正确的代码,但是出现“下标不在范围内”错误。
到目前为止的代码:
Dim qdf As QueryDef
Dim fld As Field
Dim o As Integer
Dim fieldCount as Integer
fieldCount = CurrentDb.QueryDefs("qryctAverage").Fields.Count
Set qdf = db.QueryDefs("qryctAverage")
Dim n As Integer
n = fieldCount
ReDim colHeaders(0 To n - 1)
For o = 0 To n - 1
colHeader(o) = qdf.Fields(o).Name
Next o
错误行:colHeader(o) = qdf.Fields(o).Name
我是VBA的新手,所以我感谢耐心和耐心地提供帮助!预先感谢
注意:我找到的所有答案都适用于非动态数组。
编辑:
在删除Dim colHeader() as String
错误行:colHeader(o) = qdf.Fields(o).Name
答案 0 :(得分:3)
Dim colHeader() As String
ReDim colHeaders(0 To n - 1)
您已声明colHeader
,但调整了colHeaders
的大小。 Option Explicit
无法接受,因为ReDim
语句作为声明也完全有效。
但是,colHeader
的大小没有确定,因此索引o
必然超出范围:
colHeader(o) = qdf.Fields(o).Name
将其更改为
colHeaders(o) = qfd.Fields(o).Name
我将删除Dim colHeader() As String
声明,并在模块顶部添加Option Explicit
(如果缺少)。
答案 1 :(得分:2)
另一种方法是使用For Each
块。
此代码构建由|
分隔的单个字段名称字符串。
Split
然后用于将字段字符串转换为字段名称数组,然后将其传递回调用过程。
Option Explicit
Sub Test()
Dim colHeaders As Variant
colHeaders = FieldNames("qryctAverage")
Debug.Assert False 'Pause code so you can look at colHeaders.
End Sub
Public Function FieldNames(QueryName As String) As Variant
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim fldNames As String
Set qdf = CurrentDb.QueryDefs(QueryName)
For Each fld In qdf.Fields
fldNames = fldNames & fld.Name & "|"
Next fld
fldNames = Left(fldNames, Len(fldNames) - 1)
FieldNames = Split(fldNames, "|")
End Function