三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
Ken3三流君の連絡先:
[google formsで連絡する]
上記の問い合わせフォームに質問・感想など気軽に書き込んでください

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Access OLE型のフィールドに埋め込まれているWordデータをファイルに保存 TypeName(Me!OLE型.Object)=Document

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の取り出し処理
解決のヒントとなれば幸いです・・・・


質問・感想・クレームなど、
気軽にコメント欄に書いてもらえるとうれしいです。

[Googleフォームにコメントを残す]
↑質問・コメントの入力フォームです、気軽に書いてください


フッター:最後にKen3Videoの動画一覧を紹介します

YouTubeにアップした動画です。他の動画を一瞬でも見てもらえるとさらに嬉しいです。
再生リスト:[三流君Ken3の最新動画]←リストの一覧形式で表示する


また、ブログを見に来てくださいね。ではまたぁ~