2017-08-31 4 views
0

この私は、次のコードこと:VBAディレクトリにインポートデータは、全てのスプレッドシートから一定の基準を満たす

Public Function Import_Multi_Excel_Files() 

Dim InputFile As String 
Dim InputPath As String 

InputPath = "L:\Directory\To\Project\Data\" 
InputFile = Dir(InputPath & "*.xls*") 
worksheetName = "WorksheetThatHasData!A:H" 

Do While InputFile <> "" 
    DoCmd.TransferSpreadsheet acImport, , "Table_1", InputPath & InputFile, -1, worksheetName, True '< The true is for column headers 
    InputFile = Dir 
Loop 

End Function 

上記コードがある(各ワークブック内の特定のワークシートからのデータのすべてをつかんされ良い)とそれをMS Accessにインポートします。しかし、私は、今月のレポートの日付は、現在の月と前月を常に含むことに気付きました。すべてのファイル名の形式はReport-YYYYMMです。私が蹴っているアイデアは、ファイル名のYYYYMM部分を見て、対応する日付のデータだけを取得するものです。

編集および追加

以下Actuarial_Report-201705
Enrollment_Report-201705

上記レポートの各月と4月からの情報を含むプレミアム-DATA-201705。しかし、前月のレポートには、4月から3月までのデータが明らかに含まれています。何が起こっているのは、私がインポートしたすべてのデータが登録、保険料、保険数理情報を2回カウントしたことです。私は、201705のレポートから201705のデータを取り出し、そのコードが201704の情報を無視するようにしたいだけです。

+0

いくつかのサンプルファイル名(拡張子)を入力してください。また、あなたの質問をもっと明示してください。あなたは月と年を隔離した後、正確に何をしたいですか? –

+0

あなたが蹴っているアイデアは良いものです。このアイデアを実装するためにこれまでに試したコードを投稿してください。ここには、どこに行き詰まっているのか、エラーメッセージなどの不具合の説明が簡単に記載されています。 –

+0

@ErikvonAsmuth私は質問を下に追加しました。レポートにファイル名に201705という日付がある場合は、2017-05の情報のみがコピーされます。ファイル名の形式はすべてYYYYMM形式で、ワークブック内には列BにYYYY-MMという形式の日付が入ります。 – emka

答えて

0

は、以下を使用してWhileループを交換してください:

MyDateColumn
Dim strMonth As String 
Dim strYear As String 
Do While InputFile <> "" 
    strMonth = Mid(InputFile, Len(InputFile) - 6, 2) 
    strYear = Mid(InputFile, Len(InputFile) - 10, 4) 
    DoCmd.TransferSpreadsheet acImport, , "Table_1", InputPath & InputFile, -1, worksheetName, True '< The true is for column headers 
    CurrentDb.Execute "DELETE * From Table_1 WHERE MyDateColumn < #" & strYear & "/" & strMonth & "/01#" 
    InputFile = Dir 
Loop 

は、あなたが日付を格納列です。

前提:あなたは、別のテーブルにインポートし、無効な日付情報を削除し、Table_1

にデータを追加したいと思う他に、保存しておきたいこと Table_1に他の古い情報を格納していません

ファイル名の末尾は変更できません。そうしないとバグが発生します。

私はクエリでパラメータを使用していませんが、文字列はファイル名に由来し、真中に/の最大長6を持つため、SQLインジェクションのリスクはありません。

+0

あなたの前提はすべて正しいです。このデータベースの目的は、別々の情報を1つのレポートにまとめることです。私は最近、私たちが忙しくなり、レポートがより頻繁に要求されているので、私はつま先をvbaの水に突き刺し始めました。 – emka

+0

私はちょうどそれを実行しました。まだ数字が倍増しているようです。 – emka

+0

倍数ですか?特定の日付の前に日付を削除することになっています。私は倍数の何も知らない。インポートするテーブルの正確なテーブル構造を提供します。 –

関連する問題