1

1 つの Access データベースにインポートしたい約 200 個の Excel ファイルがあり、各ファイルのテーブルを用意しています。各 Excel ファイルには複数のワークシートがありますが、インポートしたいワークシートの名前が一貫しています。

このためのコードをいくつか見つけました。http://www.accessmvp.com/KDSnell/EXCEL_Import.htm#ImpBrsFldFileshttp://social.msdn.microsoft.com/Forums/en-US/dfea25ab-cd49-を参照してください。 495c-8096-e3a7a1484f65/VBA を使用して異なるファイル名の複数の Excel ファイルをインポートする

これが私が試したコードの1つです:

Option Compare Database

Sub ImportFromExcel()

End Sub

Dim strPathFile As String, strFile As String, strPath As String
Dim strTable As String, strBrowseMsg As String
Dim blnHasFieldNames As Boolean
    ' Change this next line to True if the first row in EXCEL worksheet
    ' has field names
blnHasFieldNames = True

strBrowseMsg = "C:\Users\fratep\Desktop\Long-term EWM Study Data Files\"
strPath = BrowseFolder(strBrowseMsg)
If strPath = "" Then
   MsgBox "No folder was selected.", vbOK, "No Selection"
   Exit Sub
End If

   ' Replace tablename with the real name of the table into which
   ' the data are to be imported
strTable = "tablename"

strFile = Dir(strPath & "\*.xls")
  Do While Len(strFile) > 0
    strPathFile = strPath & "\" & strFile
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
        strTable, strPathFile, blnHasFieldNames

 ' Uncomment out the next code step if you want to delete the
 ' EXCEL file after it's been imported
 '       Kill strPathFile

   strFile = Dir()
 Loop



Sub ImportMultiExcels()

End Sub

上記の最初のリンクからですが、私が探していることを彼らにさせることができないようです。誰でも私を助けることができますか?

私はVBAが初めてなので、コードの編集について少し不安です。

4

1 に答える 1

1

インポート ウィザードを使用して、ワークシートを Access に正常にインポートできるようです。その場合、 DoCmd.TransferSpreadsheet メソッドを使用して、Access データベースの VBA コードから同じことを実行できるはずです。

次の手順では、 XYZ Priorityという名前の単一のシートをImport1という名前の Access テーブルとしてインポートします。

シート名に定数を使用したのは、ターゲット シートがすべてのソース ワークブック ファイルで同じ名前であると述べたからです。

テーブル名を「インポート」にiを加えたものにしました。これを複数のワークブックに拡張すると、インポートごとにiをインクリメントできます。または、テーブル名について別の戦略を持っているかもしれません。あなたは言わなかった。

TransferSpreadsheetステートメントを複数の行 に分割し、 (うまくいけば) 理解しやすくするためにオプション名を含めました。

私のワークシートには列名が含まれているので、HasFieldNames:=True

私のワークブックは古いバージョンの Excel で作成されました。SpreadsheetType:=acSpreadsheetTypeExcel9これで動作します。には別の値が必要な場合がありますSpreadsheetType

Public Sub Demo_TransferSpreadsheet()
    Const cstrSheetName As String = "XYZ Priority"
    Dim i As Long
    Dim strFileName As String
    Dim strTableName As String

    ' my workbook is located in the same folder as the Access db file
    strFileName = CurrentProject.Path & Chr(92) & "temp.xls"
    i = 1
    strTableName = "Import" & CStr(i)

    DoCmd.TransferSpreadsheet _
        TransferType:=acImport, _
        SpreadsheetType:=acSpreadsheetTypeExcel9, _
        Tablename:=strTableName, _
        FileName:=strFileName, _
        HasFieldNames:=True, _
        range:=cstrSheetName & "$"
End Sub
于 2013-11-04T19:24:39.840 に答える