Accessフォーム経由でOLE型に埋め込まれたWord形式のデータ
OLE型のデータを取り出し、Wordファイル化してみました。
ネタ元は下記のQAサイトです
teratail.com
いつもの動画解説 あのあの こんな感じ イライラ 解説は下記
youtu.be
https://youtu.be/8fqAbKdApMk
目次
00:00 0.やりたいこと
00:40 テーブルとフォームの説明
01:57 1.単体取り出しテスト
04:30 SaveAs2でファイル保存
05:53 2.フォームをDoCmdで回し連続実行
09:00 テスト実行 結果確認
10:40 Word97形式古い形式をテスト
13:11 コードの設置方法を説明
0.やりたいこと
テーブル1
ID オートナンバー型
タイトル テキスト型
OLE型 OLE型
をテストで作り、
フィールド名 OLE型に保存された、埋め込まれたWordデータをdocxファイルに保存したい。
1.単体で確認
オートフォームで、テーブル1からフォームを作り、
Word型のデータを作る
1.1 テスト用のボタンを作り、OLE型を確認してみた
Private Sub コマンド11_Click() Debug.Print TypeName(Me!OLE型) Dim objDOC As Word.Document '参照設定して、Word.Documentで使う 'フォーム上のコントロール 中身.ObjectがDocumentか聞く If Me!OLE型.OLEType = acOLENone Then 'acOLENone コントロールには OLE オブジェクトは保存されていません。 MsgBox "中身無し" Else If TypeName(Me!OLE型.Object) = "Document" Then Set objDOC = Me!OLE型.Object Stop Else MsgBox "Documentではありません(Wordではない?)" End If End If End Sub
2.フォームをDoCmdで回す(ぉぃぉぃ、そんなことしていいのか?)
Option Compare Database Option Explicit Private Sub コマンド8_Click() 'OLD型のフィールドに保存された、Wordオブジェクトを.docxファイル保存する Dim objDOC As Word.Document '参照設定して、Word.Documentで使う Dim strFNAME As String '保存するファイル名 Dim strPATH As String '保存先のパス strPATH = Application.CurrentProject.Path & "\文章\" 'DBの下に\文書\ DoCmd.GoToRecord , , acFirst '先頭レコードへ 'バカっぽいけど先頭へ 'フォーム上で、データがなくなるまでループ While Me.NewRecord = False '新規レコードになるまでループ strFNAME = strPATH & Me!ID.Value '保存場所付きファイル名はIDで作成※拡張子なし Debug.Print strFNAME 'OLD型がWord Documentなら、.Save2でファイル保存 'フォーム上のコントロール 中身.ObjectがDocumentか聞く If Me!OLE型.OLEType = acOLENone Then 'acOLENone コントロールには OLE オブジェクトは保存されていません。 '中身無しの時は、何もしない Else If TypeName(Me!OLE型.Object) = "Document" Then 'Word文章なら Set objDOC = Me!OLE型.Object 'いったん代入する objDOC.SaveAs2 strFNAME 'ファイル形式省略 いいのかよ・・・ End If End If '次のレコードをフォームに表示したいので、 DoCmd.GoToRecord , , acNext '次のレコードへ ぉぃぉぃ、フォーム上で移動かよ Wend MsgBox "終了しました" & strPATH & "を確認してください" End Sub
AccessでOLE型からWordの取り出し処理
解決のヒントとなれば幸いです・・・・