三流君 ken3のmemo置き場

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

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答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の取り出し処理
解決のヒントとなれば幸いです・・・・

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)