Excel VBA質問箱 IV

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

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


10686 / 13646 ツリー ←次へ | 前へ→

【20415】×ボタンを使用不可⇒使用可にしたい AKIRA 04/12/8(水) 14:21 質問[未読]
【20417】Re:×ボタンを使用不可⇒使用可にしたい IROC 04/12/8(水) 14:35 回答[未読]
【20418】Re:×ボタンを使用不可⇒使用可にしたい Jaka 04/12/8(水) 14:41 発言[未読]
【20419】Re:×ボタンを使用不可⇒使用可にしたい IROC 04/12/8(水) 14:44 回答[未読]
【20421】Re:×ボタンを使用不可⇒使用可にしたい AKIRA 04/12/8(水) 15:44 お礼[未読]
【20429】Re:×ボタンを使用不可⇒使用可にしたい [名前なし] 04/12/9(木) 0:05 回答[未読]

【20415】×ボタンを使用不可⇒使用可にしたい
質問  AKIRA  - 04/12/8(水) 14:21 -

引用なし
パスワード
   使用できなくした×ボタンをブック終了時に再度使用可能にするにはどうすれば
よいでしょうか?
次策として
(既に開いているエクセルの「ファイル−開く」メニューでファイルを開こうと
 すると「新規ファイルとして開く」ように促すメッセージを表示する)

当初このブックは開いた時に全画面表示され終了ボタン(×)を使えなくしてあり、
シートに作成したコマンドボタンでエクセルを終了させるようにしました。
しかし、この場合このブックを既に開いているエクセルから上記のように
「ファイル−開く」メニューで開きコマンドボタンで終了させるとエクセル自体が
終了してしまい他に開いていたブックまで終了してしまいます。
そこで、このブックのみ終了するコマンドボタンを作成しましたが、終了自体は
できるのですが×ボタンをどうやって使用可能にできるかがわかりません。
このままでは、Alt+F4やタスクマネージャなどで強制終了するしかできません。
従って、×ボタンを復活させるか新規ファイルとして開くよう促すかのどちらか
にしようと思ったわけです。

お力をいただければ幸いです。
よろしくお願いします。

【20417】Re:×ボタンを使用不可⇒使用可にしたい
回答  IROC  - 04/12/8(水) 14:35 -

引用なし
パスワード
   肝心な説明がありませんね。
どのように×ボタンを使用不可にしているのですか?

【20418】Re:×ボタンを使用不可⇒使用可にしたい
発言  Jaka  - 04/12/8(水) 14:41 -

引用なし
パスワード
   ▼IROC さん:
>肝心な説明がありませんね。
>どのように×ボタンを使用不可にしているのですか?

▼AKIRA さん:
>ブックは開いた時に全画面表示され終了ボタン(×)を使えなくしてあり

全画面表示を元に戻せばいいと思うんですけど。

【20419】Re:×ボタンを使用不可⇒使用可にしたい
回答  IROC  - 04/12/8(水) 14:44 -

引用なし
パスワード
   >全画面表示を元に戻せばいいと思うんですけど。
そうですね。解釈を間違えてました。

【20421】Re:×ボタンを使用不可⇒使用可にしたい
お礼  AKIRA  - 04/12/8(水) 15:44 -

引用なし
パスワード
   ▼IROC さん:
>>全画面表示を元に戻せばいいと思うんですけど。
>そうですね。解釈を間違えてました。

説明不足ですみません。
ブックを開いた時エクセル自体の最小化、元に戻す、×は表示させており、×のみ使用不可にしてあります。

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
'wFlagsに指定する値の定義
Public Const MF_BYCOMMAND = &H0&
'nPositionに指定する値の定義
Public Const SC_CLOSE = &HF060
Public Const SC_MAXIMIZE = &HF030
Public Const SC_MINIMIZE = &HF020
Public Const SC_RESTORE = &HF120
Sub Auto_Open()

     Dim lnghWnd As Long
     Dim lngRet As Long
     Dim lngWk As Long
     lngWk = FindWindow("XLMAIN", Application.Caption)
     lnghWnd = GetSystemMenu(lngWk, 0)  'メニューのハンドルを取得
     lngRet = RemoveMenu(lnghWnd, SC_CLOSE, MF_BYCOMMAND) ' 閉じるボタン
     If lngRet = 0 Then Exit Sub '戻り値が 0 の場合はエラー
     lngRet = DrawMenuBar(lnghWnd) 'メニューバーを再描画
    
    Application.WindowState = xlMaximized '最大化処理
    
    With ActiveWindow
        .DisplayHorizontalScrollBar = False     '水平スクロールバーを消す
        .DisplayVerticalScrollBar = False     '垂直スクロールバーを消す
        .DisplayWorkbookTabs = False     'シート見出しを消す
        .DisplayGridlines = False     '枠線を消す
        .DisplayHeadings = False     '行列番号を消す
    End With

    Toolbars(1).Visible = False     '標準ツールバーを消す
    Toolbars(2).Visible = False     '書式設定ツールバーを消す
    Toolbars(5).Visible = False     '図形を消す
    Toolbars(7).Visible = False     'フォームを消す
    Toolbars(9).Visible = False     'VBを消す
    
    Application.DisplayFormulaBar = False     '数式バーを消す
    Application.DisplayStatusBar = False     'ステータスバーを消す
    Application.CommandBars("Worksheet Menu Bar").Enabled = False  'ワークシートメニューバーを消す。
    ActiveWindow.Zoom = 100
    
End Sub
Sub 終了処理()

    With ActiveWindow
        .DisplayHorizontalScrollBar = True     '水平スクロールバーを表示
        .DisplayVerticalScrollBar = True     '垂直スクロールバーを表示
        .DisplayWorkbookTabs = True     'シート見出しを表示
        .DisplayGridlines = True     '枠線を表示
        .DisplayHeadings = True     '行列番号を表示
    End With
        
    Toolbars(1).Visible = True     '標準ツールバーを表示
    Toolbars(2).Visible = True     '書式を表示
    Toolbars(5).Visible = True     '図形を表示
    Toolbars(7).Visible = False    'フォームを消す
    Toolbars(9).Visible = False    'VBを消す

    Application.DisplayFormulaBar = True     '数式バーを表示
    Application.DisplayStatusBar = True     'ステータスバーを表示
    Application.CommandBars("Worksheet Menu Bar").Enabled = True  'ワークシートメニューバーを表示
    
    Application.DisplayAlerts = False     '閉じる際に確認メッセージを出さない
    ActiveWorkbook.Close    'このブックを終了する
End Sub
Sub エクセル終了()

  With ActiveWindow
        .DisplayHorizontalScrollBar = True     '水平スクロールバーを表示
        .DisplayVerticalScrollBar = True     '垂直スクロールバーを表示
        .DisplayWorkbookTabs = True     'シート見出しを表示
        .DisplayGridlines = True     '枠線を表示
        .DisplayHeadings = True     '行列番号を表示
    End With
        
    Toolbars(1).Visible = True     '標準ツールバーを表示
    Toolbars(2).Visible = True     '書式を表示
    Toolbars(5).Visible = True     '図形を表示
    Toolbars(7).Visible = False    'フォームを消す
    Toolbars(9).Visible = False    'VBを消す

    Application.DisplayFormulaBar = True     '数式バーを表示
    Application.DisplayStatusBar = True     'ステータスバーを表示
    Application.CommandBars("Worksheet Menu Bar").Enabled = True  'ワークシートメニューバーを表示
    
    Application.DisplayAlerts = False     '閉じる際に確認メッセージを出さない
  
  Application.Quit     'アプリケーション(エクセル)を終了する
  
End Sub

【20429】Re:×ボタンを使用不可⇒使用可にしたい
回答  [名前なし]  - 04/12/9(木) 0:05 -

引用なし
パスワード
   考え方を変えて、BeforeCloseイベントで制御するのはどうでしょうか。
以下を全てThisWorkbookモジュールに記入してください。

Option Explicit
Public CanClose As Boolean 'ブックを閉じる前にTrueに設定する

'ブックがアクティブになったとき
Private Sub Workbook_Activate()
  Call ShowState(False)
End Sub

'ブックが非アクティブになったとき
Private Sub Workbook_Deactivate()
  Call ShowState(True)
End Sub

'ブックを開くとき
Private Sub Workbook_Open()
  Call ShowState(False)
  CanClose = False
  Application.WindowState = xlMaximized
  ActiveWindow.Zoom = 100
End Sub

'ブックを閉じる前
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If Not CanClose Then
    MsgBox "終了ボタン以外の方法では終了できません。終了ボタンを押してください。", vbExclamation
  End If
  Cancel = Not CanClose
End Sub

Public Sub 終了処理()   '「ブックを閉じる」ボタン用
  Call CloseBook
End Sub

Public Sub エクセル終了() '「エクセル終了」ボタン用
  Call CloseBook(True)
End Sub

'終了前処理
Private Sub CloseBook(Optional CloseApp As Boolean = False)
  Call ShowState(True)
  CanClose = True
  If CloseApp Then Application.Quit
  ThisWorkbook.Close False
End Sub

'エクセルの状態設定
Private Sub ShowState(ParamBool As Boolean)
    With ActiveWindow
        .DisplayHorizontalScrollBar = ParamBool '水平スクロールバー
        .DisplayVerticalScrollBar = ParamBool  '垂直スクロールバー
        .DisplayWorkbookTabs = ParamBool     'シート見出し
        .DisplayGridlines = ParamBool      '枠線
        .DisplayHeadings = ParamBool       '行列番号
    End With
    
    Toolbars(1).Visible = ParamBool  '標準ツールバー
    Toolbars(2).Visible = ParamBool  '書式ツールバー
    Toolbars(5).Visible = ParamBool  '図形ツールバー
    Toolbars(7).Visible = False    'フォームを消す
    Toolbars(9).Visible = False    'VBを消す
    
    Application.DisplayFormulaBar = ParamBool    '数式バー
    Application.DisplayStatusBar = ParamBool     'ステータスバー
    Application.CommandBars("Worksheet Menu Bar").Enabled = ParamBool 'ワークシートメニューバー
End Sub

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