2016-11-11 32 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

只是好奇 - 這是否有幫助? –