- ベストアンサー
エクセルの×ボタンを消したい
エクセルで右上の×ボタン(閉じるボタン)を消したいのです。その下の×ボタンの消し方はわかったのですが一番上の一番右にある×ボタン(Windowsxpでは赤いボタン)の消し方がわかりません。もちろんVBAを使ってかまいません。どうぞよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 本来は、「×ボタン」機能だけを取ればよいはずなのですが……。 '<ThisWorkbook モジュール> Dim OptionValue As Boolean Private Sub Workbook_BeforeClose(Cancel As Boolean) If OptionValue = False Then Cancel = True End If End Sub Sub KeyMacro_for_Quit() 'こちらのマクロを実行しないと終われない。 OptionValue = False End Sub もちろん、ボタン自体を消す方法は、ある程度VBAをやってきている人なら分ることですが、以下は、あまり好まれません。なお、「EnableFalse」「EnableTrue」が、実行ファイルです。 '<以下を全て標準モジュールに登録してください> Private Declare Function GetSystemMenu Lib "user32.dll" ( _ ByVal hWnd As Long, _ ByVal bRevert As Long) As Long Private Declare Function DeleteMenu Lib "user32.dll" ( _ ByVal hMenu As Long, _ ByVal nPosition As Long, _ ByVal wFlags As Long) As Long Private Declare Function DrawMenuBar Lib "user32.dll" ( _ ByVal hWnd As Long) As Long Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Const SC_CLOSE As Long = &HF060& Private Const MF_BYCOMMAND As Long = &H0& Private Sub CloseButtonEnabled(Swich As Boolean) Dim hWnd As Long Dim hMenu As Long Dim rc As Long '"XLMAIN" Excelのクラス名 'XL 2000 用 hWnd = FindWindow("XLMAIN", Application.Caption) 'XL 2002 用は、以下でも可能 'Application.Hwnd If Swich Then hMenu = GetSystemMenu(hWnd, 1&) Else hMenu = GetSystemMenu(hWnd, 0&) rc = DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND) End If rc = DrawMenuBar(hWnd) End Sub '---------------------------------- '実行ファイル Sub EnableFalse() '×をEnable Falseに Call CloseButtonEnabled(False) End Sub Sub EnableTrue() '×をEnable Trueに Call CloseButtonEnabled(True) End Sub '---------------------------------- 必要あって質問されているとは思いますが、当然のことですが、Application自体を終了させるためのプロシージャが作れないと、結果的にはトラブルの元になりますので、ご注意ください。簡単なロジックの問題なのですが、慣れないと分らなくなることがあります。 なお、私は、仮に終了ボタンをどこかに置いても、右上の終了×ボタンを殺したりしません。そういうブックの作成にめぐり合わないだけかもしれませんが。
その他の回答 (2)
- Kazupie
- ベストアンサー率17% (56/323)
うろ覚えですが、アプリケーション上及びVB、VBAで「×ボタン(閉じるボタン)」の機能を無効にする方法は無かったと思います。 APIに、このような機能があるのかも知れませんが、エンドユーザーを惑わすようなことは、やめた方が無難だと思います。
- RandyPlus
- ベストアンサー率32% (91/279)
今、WinXPのマシンを立ち上げていないのでXPでの確認はしていませんが Win2000&EXCEL2000 でやってみたところ、全画面表示にすれば、エクセルの閉じるボタンは表示されないようでした。 これでは、ダメですか?
補足
早速の回答ありがとうございます。実はその方法は試してみたんですが、sheetの表示、非表示がVBAでうまくいかなくなってしまうんです。 Worksheets("データ").Visible = True のところでエラーになってしまうんでなやんでいるんです。