こんにちは、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も見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
あなたの習慣について教えてください!!
あなたが習慣だと思って実践しているものを共有してくださいませんか? 筋肉トレーニングでも朝シャワーでも、あなたが習慣だなと思えば何でも構いません
-
accessへエクセルの複数のシートのインポートの仕方
Access(アクセス)
-
access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい
Access(アクセス)
-
VBA 複数のCSVファイルを一度にインポートするには?
Access(アクセス)
-
-
4
【AccessVBA】ダイアログで複数選択しCSVインポートする
Access(アクセス)
-
5
複数のCSVファイルのAccessテーブルへの連続インポートについて
Visual Basic(VBA)
-
6
エクセルからアクセスにインポートすると、エラーが出てしまいます。原因を教えていただけませんか。
Access(アクセス)
-
7
アクセスと同フォルダのCSVファイルをインポートしたい
Access(アクセス)
-
8
Excel複数シートをaccessへ一括インポート
Visual Basic(VBA)
-
9
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
10
ACCESSで400以上のフィールドがある場合の作成方法‥
その他(データベース)
-
11
複数のエクセルファイルをアクセスにインポートし自動で一つのデータにまとめたい
Access(アクセス)
-
12
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
13
accessで該当するレコードがない場合
その他(プログラミング・Web制作)
-
14
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
週1ペースで会うカップルでデー...
-
セックスする度に胸が大きくな...
-
アナルファックと普通のセック...
-
恋人とセフレの違いはなんです...
-
セックスする時なぜ声出るの
-
初めて泊まりにきてくれる彼女...
-
付き合って1ヶ月でヤった後別れ...
-
彼氏が私の性格も見た目も褒め...
-
おじさんになってから若い女性に
-
未成年同士でラブホに行った際...
-
セックスについて。 彼が正常位...
-
彼女と旅行
-
30代前半男性の性欲
-
体目的?
-
セックスの2回目が無理
-
彼女が噛んできます。 歯型がつ...
-
彼女とのセックスに新鮮味を感...
-
女性に質問です。 僕はセックス...
-
一番多くて週に何回セックスし...
-
俗にいうセフレの定義を知りた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セックスする度に胸が大きくな...
-
週1ペースで会うカップルでデー...
-
恋人とセフレの違いはなんです...
-
セックスする時なぜ声出るの
-
アナルファックと普通のセック...
-
彼氏が私の性格も見た目も褒め...
-
おじさんになってから若い女性に
-
セックスについて。 彼が正常位...
-
付き合って1ヶ月でヤった後別れ...
-
彼女とのセックスに新鮮味を感...
-
初めて泊まりにきてくれる彼女...
-
未成年同士でラブホに行った際...
-
セックス前にAV
-
俗にいうセフレの定義を知りた...
-
彼女が噛んできます。 歯型がつ...
-
彼女と旅行
-
一番多くて週に何回セックスし...
-
30代前半男性の性欲
-
女性に質問です。 僕はセックス...
-
体目的?
おすすめ情報
あ、解りにくい書き方でしたね 定義ファイルを2か所変更してあと標準モジユール クラスの説明をしました、