2016-11-11 28 views
0

嘿家伙我有点用我的代码的障碍。检查数组的唯一值和输出csv(循环和访问vba)

它的核心是:我需要循环访问查询,找到所有来自某个字段的唯一值(在这种情况下称为UtilityDunsNumber),将它们放入一个数组,然后对每个DunsNumber运行另一个查询数组并输出一个CSV文件,其中包含来自该新查询的所有记录,然后循环返回以为每个dunsnumber创建一个文件。

下面的代码我迄今:

Private Sub Command0_Click() 
    Dim db As DAO.Database 
    Dim records() As DAO.Recordset 
    Dim duns() As String 
    Dim i As Integer 

    Dim fs As String 


    fs = "C:\TestECI\IN_572_COMPANY_" & Format(Now(), "yyyymmdd") & "_814EN01_" 



    Set records = db.OpenRecordset("SELECT * FROM qry_RequestECI") 

    'loop through records, get list of unique DUNS numbers 
    'get unique duns 
    For Each Record In records 
     If IsInArray(Record.UtilityDunsNumber, duns) Then 
      continue 
     Else 
      ReDim Preserve duns(1 To UBound(duns) + 1) As String 
      ' add value on the end of the array 
      arr(UBound(arr)) = Record.UtilityDunsNumber 
     End If 
    Next 

    For Each UtilityDunsNumber In duns 
     Set records = db.OpenRecordset("SELECT * FROM qry_RequestECI WHERE UtilityDunsNumber =" & dun) 
     i = 2000 
     fs = fs & i & ".csv" 
     DoCmd.TransferText acExportDelim, , records, fs, True 
     i = i + 1 
    Next 
End Sub 

,且目前没有在这里:Set records = db.OpenRecordset("SELECT * FROM qry_RequestECI")出现错误“无法指定数组”

说明我还是有点的用VBA初学者,所以任何帮助,将不胜感激

+0

什么问题?这段代码产生了什么,或者它在哪里失败? –

+0

抱歉,我的错误,编译它停在'Set records = db.OpenRecordset(“SELECT * FROM qry_RequestECI”)'错误“不能分配给数组” – mattlore

回答

0
Dim records() As DAO.Recordset 

在这里,我们声明记录集的阵列 ...

Dim records As DAO.Recordset 

可能是你想要的。

+0

是的,这是正确的。我试图把查询的结果放入一个数组中,以便它可以通过dunsnumber字段分隔结果,并进入下一个可输出csv文件的循环。 – mattlore

+0

'OpenRecordset'返回一个Recordset对象,而不是一个数组的记录集。 –

0

有一个简化,可能会或可能不会帮助。为了让邓号码的列表,你可以使用

set DunsRS=db.openrecordset "select UtilityDunsNumber from qry_RequestECI group by UtilityDunsNumber" 

然后你就可以通过列表循环与

DunsRS.movefirst 
do while not DunsRS.eof 
dun = DunsRS.fields("UtilityDunsNumber").value 
... 
... 
DunsRS.movenext 
Loop 

这可能足以解决问题 - 不知道,但不尝试它。

+0

只是好奇 - 这是否有帮助? –