質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

3049閲覧

Accessで添付ファイル型のフィールドを含むテーブルを他のテーブルに追加したい

yukumamu0724

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2021/04/06 02:20

編集2021/04/06 04:19

前提・実現したいこと

ここに質問の内容を詳しく書いてください。

Access2019で添付ファイル型のフィールドを含むテーブル1のデータをテーブル2に追加したいです。
VBAでできることは分かったのですが、初心者故なぜエラーが発生しているのか判らずお手上げ状態です。
ご教授いただけると幸いです。

発生している問題・エラーメッセージ

![イイメージ説明(4aeaab84a533b63559ba0cf6095ff0a8.png)
ユーザー定義型は定義されていません

該当のソースコード

標準モジュールに 

Private Function CopyAttachmentField(ByVal rsFromTbl As DAO.Recordset2, ByVal rsToTbl As DAO.Recordset2) As Boolean Dim intField As Integer CopyAttachmentField = False '初期値は失敗 On Error GoTo ERRTRAP 'レコード終了まで処理 Do Until rsFromTbl.EOF = True rsToTbl.AddNew '待避先に新規追加 'フィールド分のデータをセットする For intField = 0 To rsFromTbl.Fields.Count - 1 '待避先のフィールドが更新可能な場合 If rsToTbl.Fields(intField).DataUpdatable = True Then '待避元のデータがNullではない場合 If IsNull(rsFromTbl.Fields(intField).value) = False Then '待避先に待避元のデータをセットする rsToTbl.Fields(intField).value = rsFromTbl.Fields(intField).value End If End If Next rsToTbl.Update '待避先を更新 rsFromTbl.MoveNext Loop rsFromTbl.Close rsToTbl.Close Set rsFromTbl = Nothing Set rsToTbl = Nothing CopyAttachmentField = True 'ここまできたら成功 Exit Function ERRTRAP: MsgBox "添付ファイル型データの追加中にエラーが発生しました" & vbCrLf _ & "エラー番号:" & Err.Number & vbCrLf _ & "エラー内容:" & Err.Description & vbCrLf, vbCritical, "予期せぬエラー" End Function

フォームの追加ボタンに

Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Set rs1 = CurrentDb.OpenRecordset("テーブル1") Set rs2 = CurrentDb.OpenRecordset("テーブル2") Do Until rs1.EOF rs2.AddNew rs2!ID = rs1!ID CopyAttachmentField rs1!フィールド1.Value, rs2!フィールド1.Value rs2.Update rs1.MoveNext Loop rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing

試したこと

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12142450027
https://at-links.biz/blog/?p=285
上記を参考にそのままコードをコピーして試してみました
テーブルのフィールド、データ型、テーブル名も同じです。

参照設定は
Microsoft ActiveX Date Objects 6.1 Library
Microsoft DAO 3.6 Objyest Library
を設定しました。

補足情報(FW/ツールのバージョンなど)

Access2019

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2021/04/06 02:31

コードはマークダウン記法のコードブロックに入れてください。 コード部分を選択して、エディター上部のツールバーの <code> をクリックするとコードブロックになります。
yukumamu0724

2021/04/06 02:36

すみません、修正しました!
hatena19

2021/04/06 02:37

あと、 On Error GoTo ERRTRAP の前に ' (単引用符)をいれてコメントアウトしてから実行して、どの行でエラーがでるか確認して、その行のコードを質問に追記してください。
yukumamu0724

2021/04/06 04:19

ありがとうございます。 コメントアウトしてみたのですが、画像の通りです。。。
hatena19

2021/04/06 04:40

回答に追記しましたので参照ください。
guest

回答1

0

ベストアンサー

まずは下記の間違いを修正してください。

diff

1Do Until rs1.EOF 2rs2.AddNew 3rs2!ID = rs1!ID 4- CopyAttachmentField(rs1!フィールド1.Value = rs2!フィールド1.Value) 5+ CopyAttachmentField rs1!フィールド1.Value, rs2!フィールド1.Value 6rs2.Update 7rs1.MoveNext 8- Loo 9+ Loop

次に、参照設定で、

Microsoft DAO 3.6 Object Library

のチェックを外して、代わりに、

Microsoft Office 16.0 Access database engine Object Library

にチェックを入れてください。(16.0 の部分は別の数値になっている場合があるかも)

投稿2021/04/06 02:42

編集2021/04/06 04:40
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukumamu0724

2021/04/06 05:33

!!!!ありがとうございます!!!(喜) 無事にできました!!! これを基に目的の処理ができるように頑張って組み立ててみます。 本当にありがとうございました。
hatena19

2021/04/06 05:37

一応解説しておきますと、 Microsoft Office 16.0 Access database engine Object というのは、DAOの後継のデータベースエンジンになります。 DAO.Recordset2 というのは新しく追加されたプロパティなので、最新のライブラリを参照することによって利用できるようになります。
yukumamu0724

2021/04/06 06:03 編集

なるほど、そういうことですか。。 ユーザー定義型は定義されていませんのエラーが出ていたので、参照設定だと気が付き DAOの設定を確認したのですが上手くいかず途方に暮れていました。。 Accessを触るのは20年ぶりですが(汗)四苦八苦しながら作っている処です。 当時はマクロしか触っていなかったので・・・(泣) 勉強になりました!ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問