- ベストアンサー
VBAでサブフォルダからのインポート方法
- AccessとExcelを使用して、特定のフォルダ内のサブフォルダからファイルをインポートする方法についての質問です。
- トップパスの設定方法やインポートファイルの名称の指定方法、インポート範囲の設定方法について、初心者の方に分かりやすく教えて欲しいとのことです。
- 現在、同じパス内にあるエクセルファイルを指定した範囲でテーブルにインポートすることはできているが、それをサブフォルダ内のファイルにも適用したいとしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 参照設定「Microsoft Scripting Runtime」で、 モジュールの先頭から、 Option Compare Database Option Explicit Dim j As Long Dim x As String Dim sSql As String Sub Shori_0() Dim f As Object Dim b As Object Dim c As Object Dim d As Object Dim t As Variant Dim e As Object Dim p As String Dim i As Long Set e = CreateObject("Excel.Application") With e.FileDialog(4) If .Show = True Then t = .SelectedItems(1) Else e.Quit Set e = Nothing Exit Sub End If End With e.Quit Set e = Nothing x = Forms![frm]![txt_範囲] Set f = CreateObject("Scripting.FileSystemObject") On Error Resume Next sSql = "DROP TABLE テストテーブル " CurrentProject.Connection.Execute CommandText:=sSql sSql = "DROP TABLE 一時テーブル " CurrentProject.Connection.Execute CommandText:=sSql On Error GoTo 0 Call Shori_1(f.GetFolder(t), i) On Error Resume Next sSql = "DROP TABLE 一時テーブル " CurrentProject.Connection.Execute CommandText:=sSql On Error GoTo 0 End Sub Sub Shori_1(ByVal objFolder As Folder, ByRef j As Long) Dim u As Folder Dim w As File For Each u In objFolder.SubFolders Call Shori_1(u, j) Next For Each w In objFolder.Files With w Call Shori_2(.Path) End With Next Set u = Nothing Set w = Nothing End Sub Sub Shori_2(c As String) If c Like "*_3年目.xls*" Then If j = 0 Then DoCmd.TransferSpreadsheet acImport, , "テストテーブル", c, True, x sSql = "ALTER TABLE テストテーブル ADD COLUMN ファイル名 VarChar(250);" CurrentProject.Connection.Execute CommandText:=sSql sSql = "UPDATE テストテーブル SET ファイル名='" & c & "';" CurrentProject.Connection.Execute CommandText:=sSql j = j + 1 Else On Error Resume Next sSql = "DROP TABLE 一時テーブル " CurrentProject.Connection.Execute CommandText:=sSql On Error GoTo 0 DoCmd.TransferSpreadsheet acImport, , "一時テーブル", c, True, x sSql = "ALTER TABLE 一時テーブル ADD COLUMN ファイル名 VarChar(250);" CurrentProject.Connection.Execute CommandText:=sSql sSql = "UPDATE 一時テーブル SET ファイル名='" & c & "';" CurrentProject.Connection.Execute CommandText:=sSql sSql = "INSERT INTO テストテーブル SELECT * FROM 一時テーブル" CurrentProject.Connection.Execute CommandText:=sSql j = j + 1 End If End If End Sub
その他の回答 (2)
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは こちらでテストしている限りでは動いています。 どのコードでエラーになっていますか?
補足
ご連絡遅くなりました。 ご質問しておりましたコンパイルエラーですが、(別件で)PCを再起動したところ、エラーが出なくなりました。 どういうことなのかは不明ですが、大丈夫そうです。 お騒がせして申し訳ありませんでした。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは モジュールの先頭から、と書いておきました。 新しいモジュールを挿入して、その先頭から貼り付けて下さい。 既に、 Option Compare Database Option Explicit が有る場合も、面倒なので上書きして下さい。
補足
なるほど、失礼しました。 さて、今度は「実行時エラー:抽出条件でデータ型が一致しません。」と出てしまします。 抽出条件も何も・・・???です。 すみません。
お礼
今回も本当に助かりました! また何かありましたら、ご教示のほど よろしくお願い致します。
補足
参照設定しましたが、 Option Compare Database 部分で 「プロジーシャ内では無効です。」のコンパイルエラーが出てしまいます。 今回もご面倒おかけしますが、教えていただけますでしょうか。 よろしくお願いします!