2011-12-08 76 views
0

我是新手,您的幫助和耐心將不勝感激。許多tks提前。我需要正確的語法/代碼才能將文件名稱存入訪問數據庫表。以下是代碼和輸出。輸出是8列,前7列是數字,列8是我想要文件名的地方。代碼進入一個目錄,檢查那裏的所有csv文件,然後將csv數據導入到訪問dbase表中。我需要用csv文件名填充'com'列。目前它被填充了一個字符串。訪問表的文件名

Sub Import_multiple_csv_files() 


Const strPath As String = "C:\text1\" 'Directory Path 
Dim strFile As String 'Filename 
Dim strFileList() As String 'File Array 
Dim intFile As Integer 'File Number 
Dim SQL As String 

'Loop through the folder & build file list 
strFile = Dir(strPath & "*.csv") 
While strFile <> "" 
    'add files to the list 
    intFile = intFile + 1 
    ReDim Preserve strFileList(1 To intFile) 
    strFileList(intFile) = strFile 
    strFile = Dir() 
Wend 
'see if any files were found 
If intFile = 0 Then 
    MsgBox "No files found" 
    Exit Sub 
End If 
'cycle through the list of files & import to Access 
'creating a new table called MyTable 
    SQL = " UPDATE Test SET Com = ""'strFile'"" WHERE Com IS NULL OR Com=''" 
For intFile = 1 To UBound(strFileList) 

DoCmd.TransferText acImportDelimi, , _ 
    "Test", strPath & strFileList(intFile) 
    'DoCmd.RunSQL SQL 
    CurrentDb.Execute SQL 

輸出似乎不

F1   F2  F3  F4  F5  F6  F7  com 
20111128 2.6922 2.6922 2.6922 2.6922 3340 17696 'strFile' 
20111129 2.7229 2.7229 2.7229 2.7229 5010 18141 'strFile' 
20111130 2.7401 2.7401 2.7401 2.7401 3641 18723 'strFile' 
20111201 2.7376 2.7376 2.7376 2.7376 8087 19321 'strFile' 
20111202 2.7784 2.7784 2.7784 2.7784 0  0  'strFile' 
20111128 2.6727 2.6727 2.6727 2.6727 3889 26111 'strFile' 
20111129 2.7039 2.7039 2.7039 2.7039 4562 26647 'strFile' 
20111130 2.722 2.722 2.722 2.722 3043 27099 'strFile' 
20111201 2.7218 2.7218 2.7218 2.7218 9180 27037 'strFile' 
20111202 2.7623 2.7623 2.7623 2.7623 0  0  'strFile' 

回答

1

你會好起來的編輯你原來的問題不是提出新的,但答案是,你是在混淆的報價,而不是串聯變量到字符串,應該是這樣的:

SQL = "UPDATE Test SET Com = '''" & strFile & "''' WHERE Com IS NULL OR Com = ''" 

放在引號strFile導致它被視爲爲字符串字面量,而不是獲取〜應變值g變量本身。

+0

嗨感謝您的反饋。我嘗試了上面的腳本,但是現在com列中的輸出是2個引號''?我究竟做錯了什麼?非常感謝。 –

+0

也許這是每一方的一個單引號。自從我做了任何VBA並且我沒有在當前計算機上安裝Access來測試,這已經有一段時間了。 – Simon

+0

非常感謝您的幫助 –

0

好像你實際上並不希望在數據單引號:

SQL = "UPDATE Test SET Com = '" & strFile & "' WHERE LEN(Com) = 0;" 

...但我認爲你需要更改SQL你以後的循環中如

'cycle through the list of files & import to Access 
'creating a new table called MyTable 

SQL = "UPDATE Test SET Com = '{0}' WHERE LEN(Com) = 0;" 

For intFile = 1 To UBound(strFileList) 

    DoCmd.TransferText acImportDelimi, , _ 
     "Test", strPath & strFileList(intFile) 
    CurrentDb.Execute Replace$(SQL, "{0}", strPath & strFileList(intFile)) 

...但這隻會在空值和空值更新時纔會生效一次!

+0

嗨,我不想在數據中的任何引號只是文件名。不幸的是,這兩個選項也只能引用列8中的訪問表單元格,並且沒有文件名。難道在腳本將&strFile&放入單元格時,這個字符串實際上是空的嗎?提前謝謝了。 –

+0

@SidVicious:我已經更新了我的答案。回答你的評論:是的,因爲你之前的循環,'while strFile <>「」'即當退出'strFile =「」'時是真的。 – onedaywhen

+0

@simon您好,好消息,輝煌的結果,strFileList(intFile)是正確的字符串,現在這個字符串被加載到'com'列中。非常感謝。只有一個小問題。目前我加載2個文件。然而,相同的文件名,文件名2(該文件夾中的最後一個文件)被加載到整個列而不是文件名1,其中來自文件1的數據和文件名2來自文件2的數據。看來strFileList(intFile)更改後,列的負載不會發生。任何關於如何解決這個問題的建議?提前謝謝了。 –