misty247

misty247

2011.08.14
XML
カテゴリ: カテゴリ未分類
 ◆ Mission8. 出力用テンプレート作成 ◆

 チェックボックス1つのために、出力用テンプレートにロジックがごちゃごちゃと入ってしまった。

 BrailleDropper.dot の 標準モジュール basGlobal
 


'開かれたDocumentのコレクション
Public gOpenDocs As New Collection

'「読みやすさよりもレイアウトを優先して、文字の配置を最適化する」 の値を保管
Public gblnUserVal_PrecisePositioning As Boolean

'--------*---------*---------*---------*---------*---------*---------*---------


 BrailleDropper.dot の ThisDocument
 



'Applicationイベントハンドラ
Public WithEvents AppEvent As Word.Application

'--------*---------*---------*---------*---------*---------*---------*---------
'レイアウト優先のCheck状態 設定と復元のための処理(New時)
Private Sub Document_New()

'「読みやすさよりもレイアウトを優先して、文字の配置を最適化する」 の値を保管
If gOpenDocs.Count = 0 Then
gblnUserVal_PrecisePositioning = Options.PrecisePositioning
End If

'設定値戻しの準備
If Not gblnUserVal_PrecisePositioning Then
Call gOpenDocs.Add(Me)
Set ThisDocument.AppEvent = Word.Application

'レイアウト優先
Options.PrecisePositioning = True
End If

End Sub

'--------*---------*---------*---------*---------*---------*---------*---------
'レイアウト優先のCheck状態 設定と復元のための処理(Open時)
Private Sub Document_Open()
Call Document_New
End Sub

'--------*---------*---------*---------*---------*---------*---------*---------
'レイアウト優先のCheck状態 設定と復元のための処理(New時)
Private Sub AppEvent_DocumentBeforeClose( _
ByVal doc As Document, Cancel As Boolean)
Dim i As Integer

'ckecked使用時は通常の処理
If gblnUserVal_PrecisePositioning Then Exit Sub

'Open/CloseでコレクションにAdd/Removeして管理。最終docなら設定値を戻す
For i = 1 To gOpenDocs.Count
If gOpenDocs(i) Is doc Then
Call gOpenDocs.Remove(i)
If gOpenDocs.Count = 0 Then
Options.PrecisePositioning = False
End If
Exit For
End If
Next

'Unckecked使用時は、変更して未保存でも破棄される仕様
If doc.Path = "" Then doc.SaveAs "C:\tmp\tmp.doc"
doc.Saved = True
End Sub

'--------*---------*---------*---------*---------*---------*---------*---------
'レイアウト優先のCheck状態 設定と復元のための処理(Open時)
Private Sub Document_Close()
Call AppEvent_DocumentBeforeClose(ThisDocument, False)
End Sub

 情報頁「イベントを使用して Microsoft Word を制御する」ではClassを使用してアプリケーションイベントを捕えていたが、ThisDocumentに上乗せする形でも捕れたので、こちらにまとめた。

 書き換え中に、ひとたびクラッシュしたら、以降はチェック状態となる信頼性の乏しい仕組みではあるが、この辺りが妥協点ではないかと思われる。





お気に入りの記事を「いいね!」で応援しよう

Last updated  2011.08.14 23:52:13
コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: