Excel VBA質問箱 IV

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

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


12670 / 13645 ツリー ←次へ | 前へ→

【9261】表示設定 初心者 03/11/26(水) 10:28 質問
【9265】Re:表示設定 ichinose 03/11/26(水) 12:57 回答
【9267】Re:表示設定 訂正 ichinose 03/11/26(水) 13:26 発言
【9268】Re:表示設定 初心者 03/11/26(水) 13:56 お礼
【9282】Re:表示設定 ichinose 03/11/26(水) 18:14 回答

【9261】表示設定
質問  初心者  - 03/11/26(水) 10:28 -

引用なし
パスワード
   おはようございます。
本日もよろしくお願いいたします。

エクセルの標準機能に表示オプションがあり、
(メニューバーのツール→オプション→表示 の機能です)
その中のウィンドウオプションの操作をコードで行っています。
具体的には、VBAを書き込んだファイルでスクロールバーやシート見出しを
非表示にしています。

  Private Sub Workbook_Open()
   ActiveWindow.DisplayWorkbookTabs = False
   ActiveWindow.DisplayVerticalScrollBar = False
  End Sub

VBAを使用する際には、上記命令によって問題はないのですが、
このファイルを閉じてから別のエクセルファイルを起動させると
表示オプションがそのままになってしまいます。
時には、暫くその状態が初期状態と認識されてしまうようで、
何度も設定を変えることになります。

これを回避したいのですが、Workbook_BeforeCloseに表示命令を
書いてしまうと、保存確認のメッセージが表示されたり、
折角非表示にしている所まで表示されてしまいます。

対象のVBAファイルのみ表示オプションを操作して、
その後は元の設定通りにエクセルが使用できる
良い方法は無いでしょうか?

以上、宜しくお願いいたします。

【9265】Re:表示設定
回答  ichinose  - 03/11/26(水) 12:57 -

引用なし
パスワード
   ▼初心者 さん:
こんにちは。

>これを回避したいのですが、Workbook_BeforeCloseに表示命令を
>書いてしまうと、保存確認のメッセージが表示されたり、
>折角非表示にしている所まで表示されてしまいます。

しかし、記述するとしたら、やっぱり「Workbook_BeforeClose」の
プロシジャーですよね?
保存確認のメッセージまで自作してみたらどうでしょうか?
Thisworkbookのモジュールに

'=============================================================
Private Sub Workbook_Open()
  Call set_window(False)
End Sub
'=============================================================
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If ThisWorkbook.Saved = False Then
   ans = MsgBox(ThisWorkbook.Name & " を保存しますか?", vbExclamation + vbYesNoCancel)
   If ans = vbYes Then
     Call set_window(True)
     ThisWorkbook.Save
   ElseIf ans = vbNo Then
     Call set_window(True)
     ThisWorkbook.Saved = True
   Else
     Cancel = True
     End If
   End If
End Sub
'===================================================================
Sub set_window(t_or_f As Boolean)
   ActiveWindow.DisplayWorkbookTabs = t_or_f
   ActiveWindow.DisplayVerticalScrollBar = t_or_f
End Sub

確認してみて下さい。

【9267】Re:表示設定 訂正
発言  ichinose  - 03/11/26(水) 13:26 -

引用なし
パスワード
   >>これを回避したいのですが、Workbook_BeforeCloseに表示命令を
>>書いてしまうと、保存確認のメッセージが表示されたり、
>>折角非表示にしている所まで表示されてしまいます。
>
>しかし、記述するとしたら、やっぱり「Workbook_BeforeClose」の
>プロシジャーですよね?
>保存確認のメッセージまで自作してみたらどうでしょうか?
>Thisworkbookのモジュールに
>
>'=============================================================
>Private Sub Workbook_Open()
>  Call set_window(False)
>End Sub
>'=============================================================
>Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If ThisWorkbook.Saved = False Then
   ans = MsgBox(ThisWorkbook.Name & " を保存しますか?", vbExclamation + vbYesNoCancel)
   If ans = vbYes Then
     Call set_window(True)
     ThisWorkbook.Save
   ElseIf ans = vbNo Then
     Call set_window(True)
     ThisWorkbook.Saved = True
   Else
     Cancel = True
     End If
 Else
'保存されたときも戻しておかないと・・・・
   Call set_window(True)
   ThisWorkbook.Saved = True
   End If


> End Sub
>'===================================================================
>Sub set_window(t_or_f As Boolean)
>   ActiveWindow.DisplayWorkbookTabs = t_or_f
>   ActiveWindow.DisplayVerticalScrollBar = t_or_f
>End Sub
>
>確認してみて下さい。

【9268】Re:表示設定
お礼  初心者  - 03/11/26(水) 13:56 -

引用なし
パスワード
   ▼ichinose さん:
回答ありがとうございます。

>しかし、記述するとしたら、やっぱり「Workbook_BeforeClose」の
>プロシジャーですよね?
>保存確認のメッセージまで自作してみたらどうでしょうか?

実行してみました。
教えて頂いたとおり、メッセージの制御できました。
ThisWorkbook.Saved が必要だったのですね。
大変勉強になりました。

欲を申し上げれば、保存している3,4秒の間に
(「保存しない」の場合2,3秒)
非表示部分が見事に見えてしまうのをどうにかしたいところですが、
‘仕方が無い’ことなのですね・・・。

【9282】Re:表示設定
回答  ichinose  - 03/11/26(水) 18:14 -

引用なし
パスワード
   ▼初心者 さん:
こんばんは。
>欲を申し上げれば、保存している3,4秒の間に
>(「保存しない」の場合2,3秒)
>非表示部分が見事に見えてしまうのをどうにかしたいところですが、
容量の小さいものでテストしたので気が付きませんでした。
それで、よく見ると、保存で「いいえ」を選択しても一瞬見えますね!!
以下のように変えました。
'=========================================================
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If ThisWorkbook.Saved = False Then
   ans = MsgBox(ThisWorkbook.Name & " を保存しますか?", vbExclamation + vbYesNoCancel)
   If ans = vbYes Then
     ThisWorkbook.Save '先に保存
     Call set_window(True)
     ThisWorkbook.Saved = True
   ElseIf ans = vbNo Then
     Call set_window(True)
     ThisWorkbook.Saved = True
   Else
     Cancel = True
     End If
 Else
   Call set_window(True)
   ThisWorkbook.Saved = True
   End If
End Sub
'=====================================================================
Sub set_window(t_or_f As Boolean)
   Dim w As Window
   Set w = ActiveWindow
   If t_or_f = True Then
     w.Visible = False '戻すところを非表示にして見せない
     End If
   w.DisplayWorkbookTabs = t_or_f
   w.DisplayVerticalScrollBar = t_or_f
End Sub

再度、確認して下さい。

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