检查数组是否有唯一值并输出csv(循环和访问vba)

时间:2016-11-11 17:27:34

标签: vba ms-access access-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的初学者,所以任何帮助都会受到赞赏

2 个答案:

答案 0 :(得分:0)

def newProject(self) :
    self.startTab = StartTab(self, self.tab1)

在这里,您要声明记录集的数组 ...

Dim records() As DAO.Recordset

可能是你想要的。

答案 1 :(得分:0)

有一种简化可能会有所帮助,也可能没有帮助。要获取Duns编号列表,您可以使用

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

这可能足以解决问题 - 不确定而不尝试。