2016-10-04 8 views
0

私はアクセスを使用してExcelシートでデータを再結合する方法を見つけようとしています。私がしようとしているのは、すべて同じフォーマットの複数のExcelファイルを取り出し、それらを連続したテーブルに連結することです。今、私はExcelファイルのディレクトリを介して1つのExcelワークシートを対象にして1つのアクセステーブルに結合することを可能にするVBA機能を持っています。私の質問は、すべてのワークシートのコードを実行したり変更したりするのではなく、ディレクトリ内のすべてのワークシートに対して、どのようにして同じことをすることができるかです。複数のワークシートで同一のExcelファイルをインポートする

TL; DRあなたは100のExcelファイルがあり、それぞれに7つのワークシートがあります。フォーマットは同じですが、データは異なります。どのように私は100のファイルをすべて取って、7つのそれぞれのMS Accessのテーブルにワークシートを組み合わせるのですか?

******問題が解決されました。 (実行するために、イミディエイトウィンドウで次のコマンドを使用します

Public Function importMultipleExcelFiles(Directory As String) As Long 
For x = 1 To 7 
Dim TableName As String 
Dim WkShtName As String 
    TableName = Choose(x, "Table1", "Table2", "Table3", "Table4") 
    WkShtName = Choose(x, "Table1!", "Table2!", "Table3!", "Table4!") 
    Call SingleModule.importExcelSheets(Directory, TableName, WkShtName) 
Next x 
End Function 

:MultipleModuleという名前

Option Compare Database 

    Public Function importExcelSheets(Directory As String, TableName As String, WkShtName As String) As Long 
    On Error Resume Next 
     Dim strDir As String 
     Dim strFile As String 
     Dim I As Long 
     I = 0 
     If Left(Directory, 1) <> "\" Then 
      strDir = Directory & "\" 
     Else 
      strDir = Directory 
     End If 
      strFile = Dir(strDir & "*.XLSX") 
     While strFile <> "" 
      I = I + 1 
      strFile = strDir & strFile 
      Debug.Print "importing " & strFile 
      DoCmd.TransferSpreadsheet acImport, , TableName, strFile, True, WkShtName 
      strFile = Dir() 
     Wend 
     importExcelSheets = I 
    End Function 

モジュール2:WORKING CODE ASは

*******モジュール1という名前のSingleModuleをたどります)あなたはファイルパスを変更してください:

? importMultipleExcelFiles("C:\Excel File Directory") 

SIDE注:

あなたは、イミディエイトウィンドウでSingleModuleで次のコマンドを使用して1つのワークシートをターゲットにすることができます:

? importExcelSheets("C:\FilePath", "TableName", "WkShtName!") 
+0

、ExcelからGoogleのSQL INSERT INTO、何か '...... FROM [エクセル12.0; HDR =はい;データベース= 'C:\ excelsheet.xlsx']。 [Sheet1 $] 'Currentdb.executeまたはdocmd.runsqlを使用して –

答えて

0

申し訳ありませんが、私はあなたのテーブル名がプロシージャに起こっていたか表示されませんでした。 importExcelSheets関数を呼び出すときは、FOR-NEXTをCHOOSE関数で使用してください。あなたは、この使用してSQLを行うことができます

for x= 1 to 7 
    TableName = choose(x, "Table1", "Table2"...) 
    WkShtName = choose(x, "ContactDetails!", ...) 
    importExcelSheets Dir, TableName, WkshtName 
next x 
+0

コードを実行して元のコードとして動作させるだけで、WkShtName変数を定義してTransferSpreadsheetコマンドに追加するだけで済みます。 – geeFlo

+0

私はお詫びします、私はVBAとMS-Accessには本当に新しいです。あなたは少しステップを詳しく説明する必要があるかもしれません。私は本当にあなたの助けに感謝します。 私はイミディエイトウィンドウを使ってコードを実行しています。このコードを使用して新しいモジュールを作成し、元のコードを参照することをお勧めしますか? – takethelongsh0t

+0

コール機能からImportExcelSheetsを呼び出す必要がありますか?私があなたに与えたコードを別の手順で使用し、それを実行してください。それはあなたの元のコードをそのまま呼び出しますが、 'Public関数importExcelSheets(ディレクトリとしての文字列、StringとしてのTableName、文字列としてのWkShtName)As Long'を置き換え、" ContactDetails! " WkShtNameで。例えば、 – geeFlo

関連する問題