access vba でWordを起動しWordファイルを読込んだ後で、ファイルを保存する時に読込みファイル名に日付と時刻を自動で 付加する件で、以下の記事を載せましたが、今回はそれのクラス化を行い、どのフォームからも利用できる様にします。
⇒access vba でWordを起動しファイル保存時のファイル名変更について(DocumentBeforeSave : Word保存前イベント)
基本的には前回の記事のソースをそのまま持ってきてクラス化していますが、以下の関数を追加しています。
- WordOpen : Word文書オープン処理
- WordDisplay : Word文書表示処理
- WordClose : Word文書クローズ処理
尚、クラス生成時には内部的にWordApplicationオブジェクトを設定しています。
では、以下にそのソース全体を示します。
基本Word処理用クラス:以下のソースをクラスモジュール(clsWord)として宣言
Option Compare Database Option Explicit ' Wordオブジェクト Private WithEvents WordApp As Word.Application ' Word.Documentオブジェクト Private WordDoc As Word.Document '------------------------------------------------------------------------------ ' クラス初期化時処理 '------------------------------------------------------------------------------ Private Sub Class_Initialize() 'word起動 Set WordApp = CreateObject("Word.application") End Sub '------------------------------------------------------------------------------ ' Word・保存前イベント処理 '------------------------------------------------------------------------------ Private Sub WordApp_DocumentBeforeSave(ByVal Doc As Word.Document, SaveAsUI As Boolean, Cancel As Boolean) Dim strPath As String '日付・時刻を[yyyymmdd-hhnnss-]形式でファイル名の先頭に付加 strPath = Doc.path & "\" & format$(Now, "yyyymmdd-hhnnss-") & Doc.name '自分で新しいファイル名でDialogを呼出す With WordApp.Dialogs(wdDialogFileSaveAs) .name = strPath .Show End With '通常のDialogの非表示 Cancel = True End Sub '------------------------------------------------------------------------------ ' Word・終了イベント処理 '------------------------------------------------------------------------------ Private Sub WordApp_Quit() 'Wordオブジェクト解放 Set WordDoc = Nothing Set WordApp = Nothing End Sub '****************************************************************************** ' Word文書オープン処理 '****************************************************************************** ' 関数名 : WordOpen() ' 引数 : P_strFileName 'Word文書ファイル名 ' : P_blnVisible '初期表示フラグ '****************************************************************************** Public Sub WordOpen(ByVal P_strFileName As String, ByVal P_blnVisible As Boolean) On Error GoTo Err_WordOpen 'word起動 If WordApp Is Nothing Then Call Class_Initialize End If 'ワードファイルを読み込み、文章を編集する状態にする Set WordDoc = WordApp.Documents.Open(P_strFileName) '編集モードで開く If P_blnVisible = True Then 'Word文書表示処理 Call WordDisplay End If Exit_WordOpen: Exit Sub Err_WordOpen: MsgBox Err.Description Resume Exit_WordOpen End Sub '****************************************************************************** ' Word文書表示処理 '****************************************************************************** ' 関数名 : WordDisplay() '****************************************************************************** Public Sub WordDisplay() On Error GoTo Err_WordDisplay WordApp.Visible = True WordApp.Activate Exit_WordDisplay: Exit Sub Err_WordDisplay: MsgBox Err.Description Resume Exit_WordDisplay End Sub '****************************************************************************** ' Word文書クローズ処理 '****************************************************************************** ' 関数名 : WordClose() '****************************************************************************** Public Sub WordClose() On Error GoTo Err_WordClose 'word閉じる If Not WordDoc Is Nothing Then 'ドキュメントをSAVE無しで閉じる WordDoc.Close False Set WordDoc = Nothing 'Wordを閉じる WordApp.Quit Set WordApp = Nothing End If Exit_WordClose: Exit Sub Err_WordClose: MsgBox Err.Description Resume Exit_WordClose End Sub
このクラスを使用する例として、access フォームに1個のボタンのみを設置し、そのクリックイベントでワード文書を開く様にしてみます。
基本Word処理用クラスの使用例
Option Compare Database ' クラスWordオブジェクト Private mclsWord As clsWord '------------------------------------------------------------------------------ ' フォームロード時イベント '------------------------------------------------------------------------------ Private Sub Form_Load() Set mclsWord = New clsWord End Sub '------------------------------------------------------------------------------ ' フォームクローズイベント '------------------------------------------------------------------------------ Private Sub Form_Close() 'ワードクローズ mclsWord.WordClose 'Wordオブジェクト解放 Set mclsWord = Nothing End Sub '------------------------------------------------------------------------------ ' コマンド1開始 '------------------------------------------------------------------------------ Private Sub コマンド1_Click() Dim strPath As String 'ワードファイルを読み込み、文章を編集する状態にする strPath = Application.CurrentProject.path & "\" & "sample.docx" 'ワードファイルを読込み編集状態で表示する mclsWord.WordOpen strPath, True End Sub
上記のソースでの注意点は、クラスWordオブジェクトの変数をフォームの静的変数として宣言しているところです。
なぜならば、コマンドボタンでワードを起動した後で、本クラス内での保存前イベント処理(DocumentBeforeSave)が起こらなくなるからです。 後は、フォームのクローズ時には後片付けも必要になります。
このWord用クラスに各種の関数を追加すれば、いろんな用途に使えると思います。 今後は便利な関数をこのクラスに追加する予定です。
関連する記事
⇒access vba でWordを起動しファイル保存時のファイル名変更について(DocumentBeforeSave : Word保存前イベント)⇒access vba でExcelを起動しファイル保存でのファイル名変更について(WorkbookBeforeSave : Excel保存前イベント)
⇒access vba でのWord文書の文字列検索と置換について(Word処理用クラスに文字列置換関数を追加)
⇒access vba Bookmarkオブジェクトで文書の先頭にカーソルを移動する(Word処理用クラスに文書の先頭移動関数を追加)
おすすめ本
PR
コメント