Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


82 / 308 ツリー ←次へ | 前へ→

【654】AutoExit内でCommandbar制御がしたい めそ 09/10/16(金) 16:41 質問[未読]
【655】Re:AutoExit内でCommandbar制御がしたい りる 09/10/17(土) 10:26 回答[未読]

【654】AutoExit内でCommandbar制御がしたい
質問  めそ  - 09/10/16(金) 16:41 -

引用なし
パスワード
   はじめまして。
お分かりの方がいらっしゃいましたらご教示をお願いいたします。

文書をテンプレート化する為、AutoOpenにおいてCommandbarの
表示制御を行っています。

1.現在表示中の全てのCommandbarをVisible=Falseとする。
2.ユーザー独自のCommandbarをVisible=Trueにする。

ただしこの状態で文書を終了してしまうと、
次の別のWord文書を開いた際に、Commandbarが全て非表示の状態になってしまいます。

その為、1の前に一旦Commandbarの情報を退避(ファイルまたはバッファに保持)し、
AutoCloseまたはAutoExitにて戻すVBAを組みました。(以下、参考)

+---------------------------------------------------+
Sub AutoOpen()

  On Error Resume Next

  ' Commandbar情報をグローバル変数にバックアップ
  Dim i As Integer
  For i = 1 To ThisDocument.CommandBars.Count
    ReDim Preserve pub_Cmdbar(i - 1)
    pub_Cmdbar(i - 1) = ThisDocument.CommandBars(i).Visible
  Next i

End Sub
-----------------------------------------------------
Sub AutoClose()

  On Error Resume Next

  ' ツールバーを起動前の表示設定情報に戻す
  Dim i As Integer
  For i = 1 To CommandBars.Count
    ThisDocument.CommandBars(i).Visible = pub_Cmdbar(i - 1)
  Next i

End Sub
+---------------------------------------------------+

この方法だと上手くいくのですが、
文書に変更があった場合、AutoCloseだと保存確認メッセージが
表示され、その前に上記が実行されてしまうため、
メッセージをキャンセルすると、Commandbarがそのまま復元されてしまいます。
この状態は本来用途からすると望ましくありません。

そこでAutoCloseからAutoExitに変更をしてみましたが、
AutoExitでは上手く動作しません。(Commandbarが復元されない)

AutoCloseでは上記の問題があるため、可能であれば
AutoExit内で制御できる事が望ましいのですが、どうぞご教示をお願いいたします。

【655】Re:AutoExit内でCommandbar制御がしたい
回答  りる  - 09/10/17(土) 10:26 -

引用なし
パスワード
   めそ さん、おはようございます。

>AutoCloseでは上記の問題があるため、可能であれば
>AutoExit内で制御できる事が望ましいのですが、どうぞご教示をお願いいたします。
AutoExitというイベントは聞いたことがないので、AutoClose内で保存が必要かどうかをチェックしてみてはいかがでしょうか。


  With ThisDocument
   '未保存かどうかチェックします
   If .Saved = False Then
     If MsgBox("保存しますか?", vbYesNo) = vbYes Then
      .Save '上書きします
     Else
      .Saved = True '上書きしないので保存したことにします
     End If
   End If
  End With
  '保存処理が終わったので以下Close時に必要な処理を書きます
  MsgBox "Close", vbInformation

End Sub

単独でdocを開いていることを前提にしていますので、複数docを開いて、
docのcloseではなくWordをQuitする可能性があるのならば、
全部のブックに対して保存しているかどうかをチェックする必要があります。

82 / 308 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
207162
(SS)C-BOARD v3.8 is Free