2011-12-08 12 views
0

私は初心者であり、あなたの助けと忍耐は非常に高く評価されます。多くのtksは事前に。私は、アクセスのdbaseテーブルにファイル名を取得する正しい構文/コードが必要です。以下はコードと出力です。出力は8列、最初の7列は数字、8列はファイル名が必要な場所です。コードはディレクトリに移動し、すべてのcsvファイルがあるかどうかを確認してから、csvデータをアクセス用dbaseテーブルにインポートします。列 'com'にcsvファイル名を設定する必要があります。現時点では文字列が入力されています。アクセステーブルへのファイル名

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

にいないようだが、その答えは、あなたの引用符を混乱して文字列に変数を連結していないということですそれは文字列リテラルとしてとして扱われることを引き起こすのではなくstrinの値を取得している引用符を使用してstrFileを取り巻く

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

:、のようなものである必要がありますg変数そのもの。

+0

こんにちは、ご意見ありがとうございます。私は上記のスクリプトを試しましたが、現在comの出力は2つの引用符です ''?私は間違って何をしていますか?どうもありがとう。 –

+0

おそらくそれはそれぞれの側に1つの単一引用符です。 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)) 

...ただし、null値と空白の値が更新されたときにのみ有効です。

+0

こんにちは、私はファイル名だけのデータに引用符を入れたくありません。残念ながら、これらの2つのオプションは、カラム8のアクセス・テーブル・セルには引用符を入れているだけで、ファイル名は入れません。スクリプトが&strFile&をセルに配置するときに、この文字列は実際には空であるかもしれませんか?事前に多くの感謝。 –

+0

@SidVicious:私は自分の答えを更新しました。あなたのコメントに答えて:はい、あなたの以前のループのため、 'While strFile <>" "'つまり、 'strFile =" "'が出るのは本当です。 – onedaywhen

+0

@simonこんにちは、素晴らしいニュース、素晴らしい結果、strFileList(intFile)は正しい文字列であり、これは今 'com'列に読み込まれます。どうもありがとう。わずか1つの小さな問題。現時点では、私は2つのファイルを読み込みます。ただし、同じファイル名、ファイル名2(フォルダ内の最後のファイル)がファイル名1の代わりに列全体にロードされ、ファイル1のデータとファイル名2はファイル2のデータでロードされます。 strFileList(intFile)が変更された後で、列へのロードが実行されていないようです。これを改善する方法に関する提案はありますか?事前に多くの感謝。 –