
こんにちは、ACCESSへのエクセルデータのインポートのマクロについて教えて頂けませんか?
大量のファイルがあり、どれも同じ形式、同じフィールド名で保存してあります(xlsx形式)
これを自動でインポートするマクロはどのようなものになるでしょうか?
ファイル名は連番になっておらず、同じフォルダ内にあります。
また、テーブル名はマクロ内で随時指定したいと思っています。
aaa.xlsxをインポート定義を反映させテーブル名を指定してインポート
bbb.xlsxをインポート定義を反映させテーブル名を指定してインポート
・
・
・
・
みたいな感じです。
詳しい方教えて頂けませんでしょうか。
よろしくお願いいたします。
A 回答 (7件)
- 最新から表示
- 回答順に表示

No.7
- 回答日時:
こちらのテストでは問題ないので、迷宮入りかも。
そちらで何をしているのか、そばで見ている訳ではないので...
>エラー380って、プロパティ値のエラーなんですね。
If objIES Is Nothing Then
Err.Raise 380, ClassName, "Let ImpExpName で ImportExportSpecification がありません"
End If
ここに 380 って書いたから 380 になっただけのことです。
(数値はなんでもいいが、380 がよかろうってことで)
>ファイルのパスも自動で取得するって事は
自動ではありません。
インポート定義を作ったときに記憶されたパスを取り出しているだけです。
なるほど、ありがとうございます。
かなり効率的な上級者の方のコードなんですね、気づけずに済みません。
>>こちらのテストでは問題ないので、迷宮入りかも。
と言う事で、なにかこう当方の根本的なところに問題があるのかも知れませんね。
いろいろ考えてみます。
大変手間をかけて頂き、感謝いたします、ありがとうございます。

No.6
- 回答日時:
objIES.ImpExpName = "aaa"
↓ 試しに書き換えてみてください。
objIES.ImpExpName(CodeProject) = "aaa"
ありがとうございます。
エラー380って、プロパティ値のエラーなんですね。
http://www.kitagawa-hanga.com/se/s_vberr.html#E0 …
一応すべてのコードを半角に変換して張り付けてみましたが、同じエラーが出るようです。
また管理者として実行もやってみましたが同じ様子。
Source=ImpExpSpec,ErrNo=380,Description=LetImpExpNameでImportExportSpecification
素朴な疑問なんですが、ファイルのパスも自動で取得するって事は、ファイルの置き場所はPC内であればどこでも良いのでしょうか?
もしそうであれば、xlsxファイルをすべて読みに行っちゃうのですか?
ダミーデータを一つ作ってそれを読ませようかなと思ったのですが、ダメですかね?

No.5
- 回答日時:
下記プロシージャに1行追加してください。
' インポート/エクスポート定義の名前
Property Let ImpExpName(Optional CodeProject As CodeProject, ImpExpName As String)
On Error Resume Next
If CodeProject Is Nothing Then
Set objIES = CurrentProject.ImportExportSpecifications(ImpExpName)
Else
Set objIES = CodeProject.ImportExportSpecifications(ImpExpName)
End If
On Error GoTo 0 ' ←←←←←←←←←←←←←←←←←←←←←←←←←←これを追加
If objIES Is Nothing Then
Err.Raise 380, ClassName, "Let ImpExpName で ImportExportSpecification がありません"
End If
End Property
>Source=ImpExpSpec,ErrNo=419,Description=GetPathでImportExportSpecificationがありません。
インポート定義の名前が違っています。
再回答いただき ありがとうございます。
当方の間違いがあってはいけないので ' インポート/エクスポート定義の標準モジュールのコードをまるっと入れ替えしました。
そしてインポート定義もaaaと言う間違いの無さそうなものに変え、実際にファイルを一つ読み込んで動作することを確認してaaaに書き換えましたが、エラーメッセージが出てしまうようです。
Source=ImpExpSpec,ErrNo=380,Description=LetImpExpNameでImportExportSpecificationがありません。
となっています。

No.4
- 回答日時:
>"インポート-定義" と書いてある所を実際のインポート定義の名前に書き換えてください。
これは書き換えしましたか?
はい、2か所書き換えました。
左のプロジェクトのところには
〇〇データベース
標準モジュール
module1
クラスモジュール
ImpExpSpec
となっています。
ちなみに定義ファイルは実際に動作するか確認してみました。
検索で探してみたんですが、よくわからないんです><

No.3
- 回答日時:
コンパイルはできましたか?
Dim objIES As ImpExpSpec ←がエラーになるようなら、クラスモジュールの名前が違うということです。
クラスモジュールのプロパティの (オブジェクト名)の欄の Class1 の所を ImpExpSpec に書き換えてください。
>マクロ名の欄に何も表示されていない
エクセルの場合は、VBAで書いたサブプロシージャ名がマクロ名の欄に出てきますが、アクセスの場合はVBAとマクロは全くの別物です。マクロはVBAとは別の言語です。
とりあえずはVBEの画面からF8キーF5キーで実行してみましょう。
最終的には、フォームの実行ボタンから呼び出す形になります。
再回答いただき ありがとうございます。
コンパイルが必要なんですね、やってみました。
エラーが出たのでImpExpSpecに書き換えたらエラーが出なかったのでコンパイル出来たようです。(コンパイル完了とか出ないんですね)
モジュールのところにはImpExpSpecともうひとつModule1とでています。
F5でマクロのダイアログボックスが開いて Sampleが表示されていて選択して実行・・・したのですが、エラーメッセージが出ています。
Source=ImpExpSpec,ErrNo=419,Description=GetPathでImportExportSpecificationがありません。
となってます。
ちょっと検索して原因を調べてみます。
ありがとうございます。

No.2
- 回答日時:
' 標準モジュール ~ ' クラス モジュール の前までを 標準モジュール に記述します。
' クラス モジュール 以降を クラス モジュール に記述します。
ファイルのパス は、インポート定義から取得しています。
"インポート-定義" と書いてある所を実際のインポート定義の名前に書き換えてください。
100個くらいのファイル は、DIR関数で取得しています。
テーブル名は、ファイル名から拡張子を除いたものにしていますので、そちらのネーミングルールに書き換えてください。
Split(FileName, ".")(0) ←がファイル名から拡張子を除いている箇所です。
こんにちは、クラスモジュールまでのコードの追加が出来たのでマクロを実行したのですが、マクロ名の欄に何も表示されていないみたいなのですが、これはなんででしょうか?
実際に動作させるには、違う方法なのでしょうか、お手数ですが教えて頂けませんでしょうか。

No.1
- 回答日時:
' 標準モジュール
Option Compare Database
Option Explicit
Sub Sample()
Dim objIES As ImpExpSpec, Path As String, FileName As String
On Error GoTo Err_Proc
Set objIES = New ImpExpSpec
objIES.ImpExpName = "インポート-定義"
Path = objIES.Path
If Right(Path, 1) <> "\" Then Path = Path & "\"
FileName = Dir(Path & "*.xlsx", vbNormal)
Do Until Len(FileName) = 0
objIES.FileName = FileName
objIES.Destination = Split(FileName, ".")(0)
DoCmd.RunSavedImportExport "インポート-定義"
FileName = Dir()
Loop
Exit_Proc:
Set objIES = Nothing
Exit Sub
Err_Proc:
MsgBox "Source=" & Err.Source & ", ErrNo=" & Err.Number & ", Description=" & Err.Description
Resume Exit_Proc
End Sub
' クラス モジュール
Option Compare Database
Option Explicit
Const ClassName = "ImpExpSpec"
Const FindText1 = "<ImportExportSpecification Path = """
Const FindText4 = "Destination="""
Private objIES As ImportExportSpecification
' インポート/エクスポート定義の名前
Property Let ImpExpName(Optional CodeProject As CodeProject, ImpExpName As String)
On Error Resume Next
If CodeProject Is Nothing Then
Set objIES = CurrentProject.ImportExportSpecifications(ImpExpName)
Else
Set objIES = CodeProject.ImportExportSpecifications(ImpExpName)
End If
If objIES Is Nothing Then
Err.Raise 380, ClassName, "Let ImpExpName で ImportExportSpecification がありません"
End If
End Property
' インポート/エクスポートするファイルのパス
Property Get Path() As String
Dim strXML As String, pos1 As Long, pos2 As Long
If objIES Is Nothing Then
Err.Raise 419, ClassName, "Get Path で ImportExportSpecification がありません"
Else
strXML = objIES.XML
pos1 = InStr(1, strXML, FindText1)
If pos1 > 0 Then
pos1 = pos1 + Len(FindText1)
pos2 = InStrRev(strXML, "\", InStr(pos1, strXML, """"))
Path = Mid(strXML, pos1, pos2 - pos1)
If Right(Path, 1) = ":" Then Path = Path & "\"
End If
End If
End Property
' インポート/エクスポートするファイルのファイル名
Property Let FileName(FileName As String)
Dim strXML As String, pos1 As Long, pos2 As Long
If objIES Is Nothing Then
Err.Raise 419, ClassName, "Let FileName で ImportExportSpecification がありません"
Else
strXML = objIES.XML
pos1 = InStr(1, strXML, FindText1)
If pos1 = 0 Then
Err.Raise 51, ClassName, "Let FileName で Path がありません"
Else
pos2 = InStr(pos1 + Len(FindText1), strXML, """")
pos1 = InStrRev(strXML, "\", pos2)
objIES.XML = Left(strXML, pos1) & FileName & Mid(strXML, pos2)
End If
End If
End Property
' インポートで作成するテーブル
Property Let Destination(Destination As String)
Dim strXML As String, pos1 As Long, pos2 As Long
If objIES Is Nothing Then
Err.Raise 419, ClassName, "Let Destination で ImportExportSpecification がありません"
Else
strXML = objIES.XML
pos1 = InStr(1, strXML, FindText4)
If pos1 = 0 Then
Err.Raise 51, ClassName, "Let Destination で Destination がありません"
Else
pos1 = pos1 + Len(FindText4)
pos2 = InStr(pos1, strXML, """")
objIES.XML = Left(strXML, pos1 - 1) & Destination & Mid(strXML, pos2)
End If
End If
End Property
Private Sub Class_Terminate()
Set objIES = Nothing
End Sub
ってな感じ。
回答ありがとうございます。
ファイルのパスやファイル名をどこに入れたらよいのでしょうか?
あと、100個くらいファイルがあるのですが、どのようにしたら良いでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
accessへエクセルの複数のシートのインポートの仕方
Access(アクセス)
-
Excel複数シートをaccessへ一括インポート
Visual Basic(VBA)
-
VBA 複数のCSVファイルを一度にインポートするには?
Access(アクセス)
-
-
4
access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい
Access(アクセス)
-
5
複数のCSVファイルのAccessテーブルへの連続インポートについて
Visual Basic(VBA)
-
6
【AccessVBA】ダイアログで複数選択しCSVインポートする
Access(アクセス)
-
7
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
8
複数のエクセルファイルをアクセスにインポートし自動で一つのデータにまとめたい
Access(アクセス)
-
9
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
10
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
11
ACCESS:保存済みのインポート操作のパスを取得
その他(データベース)
-
12
Accessのマクロを使用してExcelのシートをインポートしたい
Access(アクセス)
-
13
<ACCESS>別テーブルのレコードのテキストデータが中に含まれるレコードを抽出する方法を教えてください
Access(アクセス)
-
14
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
15
「#エラー」の回避
Access(アクセス)
-
16
アクセスのレポートのヘッダーを2ページ以降にもつけるには?
Access(アクセス)
-
17
access テキストボックスの値取得
Access(アクセス)
-
18
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
19
複数CSVファイルを一括インポート
Access(アクセス)
-
20
データベースの最適化をマクロでしたい
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セックスする度に胸が大きくな...
-
週1ペースで会うカップルでデー...
-
セックスしてる時に気持ちいい...
-
僕の心が狭いのでしょうか…?セ...
-
オナ禁中はセックスしてもいい...
-
アナルファックと普通のセック...
-
初めて泊まりにきてくれる彼女...
-
セックスする時なぜ声出るの
-
恋人とセフレの違いはなんです...
-
未成年同士でラブホに行った際...
-
母子相姦経験者ですが、日本で...
-
セックスについて。 彼が正常位...
-
高校生の性行為
-
胸が揺れるくらい激しいセック...
-
おじさんになってから若い女性に
-
30代前半男性の性欲
-
体目的?
-
付き合って1ヶ月でヤった後別れ...
-
謎
-
彼女とのセックスに新鮮味を感...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セックスする度に胸が大きくな...
-
週1ペースで会うカップルでデー...
-
セックスしてる時に気持ちいい...
-
恋人とセフレの違いはなんです...
-
アナルファックと普通のセック...
-
僕の心が狭いのでしょうか…?セ...
-
おじさんになってから若い女性に
-
胸が揺れるくらい激しいセック...
-
オナ禁中はセックスしてもいい...
-
セックスする時なぜ声出るの
-
セックスについて。 彼が正常位...
-
未成年同士でラブホに行った際...
-
母子相姦経験者ですが、日本で...
-
付き合って1ヶ月でヤった後別れ...
-
初めて泊まりにきてくれる彼女...
-
彼女が噛んできます。 歯型がつ...
-
30代前半男性の性欲
-
彼女とのセックスに新鮮味を感...
-
セックス前
-
セックスする時って会話します...
おすすめ情報
あ、解りにくい書き方でしたね 定義ファイルを2か所変更してあと標準モジユール クラスの説明をしました、