こんにちは、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人1つずつ投稿してください。全ての都道府県が出たら締め切ります!
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい
Access(アクセス)
-
accessへエクセルの複数のシートのインポートの仕方
Access(アクセス)
-
VBA 複数のCSVファイルを一度にインポートするには?
Access(アクセス)
-
-
4
エクセルからアクセスにインポートすると、エラーが出てしまいます。原因を教えていただけませんか。
Access(アクセス)
-
5
アクセスと同フォルダのCSVファイルをインポートしたい
Access(アクセス)
-
6
【AccessVBA】ダイアログで複数選択しCSVインポートする
Access(アクセス)
-
7
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
8
Access2010 「演算子がありません」エラー
その他(データベース)
-
9
Excel複数シートをaccessへ一括インポート
Visual Basic(VBA)
-
10
【Access】Dcount関数の複数条件で順位を付ける方法について
Access(アクセス)
-
11
ACCESS複数テキストファイルをインポートについて
Access(アクセス)
-
12
複数のCSVファイルのAccessテーブルへの連続インポートについて
Visual Basic(VBA)
-
13
Accessの追加クエリで既存のテーブルに上書き追加をしたい
その他(データベース)
-
14
ACCESS:保存済みのインポート操作のパスを取得
その他(データベース)
-
15
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
16
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
17
accessで該当するレコードがない場合
その他(プログラミング・Web制作)
-
18
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
週1ペースで会うカップルでデー...
-
セックスする度に胸が大きくな...
-
恋人とセフレの違いはなんです...
-
彼氏が私の性格も見た目も褒め...
-
セックスする時なぜ声出るの
-
セックスについて。 彼が正常位...
-
おじさんになってから若い女性に
-
彼女とのセックスに新鮮味を感...
-
付き合って1ヶ月でヤった後別れ...
-
初めて泊まりにきてくれる彼女...
-
アラフィフの女性にお聞きしま...
-
30代前半男性の性欲
-
一番多くて週に何回セックスし...
-
性欲と、人を好きになるって別...
-
未成年同士でラブホに行った際...
-
僕の心が狭いのでしょうか…?セ...
-
セックス前にAV
-
俗にいうセフレの定義を知りた...
-
アナルファックと普通のセック...
-
彼女と旅行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セックスする度に胸が大きくな...
-
週1ペースで会うカップルでデー...
-
恋人とセフレの違いはなんです...
-
彼氏が私の性格も見た目も褒め...
-
彼女とのセックスに新鮮味を感...
-
おじさんになってから若い女性に
-
セックスする時なぜ声出るの
-
セックスについて。 彼が正常位...
-
未成年同士でラブホに行った際...
-
初めて泊まりにきてくれる彼女...
-
セックス前にAV
-
付き合って1ヶ月でヤった後別れ...
-
性欲と、人を好きになるって別...
-
一番多くて週に何回セックスし...
-
彼女が噛んできます。 歯型がつ...
-
30代前半男性の性欲
-
セックスの2回目が無理
-
女性に質問です。 僕はセックス...
-
セックスしてる時に気持ちいい...
-
俗にいうセフレの定義を知りた...
おすすめ情報
あ、解りにくい書き方でしたね 定義ファイルを2か所変更してあと標準モジユール クラスの説明をしました、