Accessフォーム経由でOLE型のフィールドを取り出し、Wordファイル化してみまました。
https://youtu.be/8fqAbKdApMk?t=538
↑のような感じでテストしました。
テーブル1
ID オートナンバー型
タイトル テキスト型
OLE型 OLE型
をテストで作り、
テストフォーム コントロール名 OLE型(まぎらわしくてスミマセン)に保存された、
埋め込まれたWordデータをファイルに保存しました。
フォームをDoCmdで回す(ぉぃぉぃ、そんなことしていいのか?)
作成したのが、下記のコードです。WordObjectを参照設定して使ってみてください
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
数件のデータでテストしかしていないので、
1000件回すと、
メモリエラー
オートメーションエラー
など、でないか、かなり心配ですが、
OLE型のWORDファイル化処理のヒントとなれば幸いです。
※コードの詳細説明は動画の頭から軽くやっているので、
https://youtu.be/8fqAbKdApMk
↑時間のある時に見て、トロイおっさんのデバッグを笑ってください・・・
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/03 00:58 編集