dポイントプレゼントキャンペーン実施中!

エクセルで右上の×ボタン(閉じるボタン)を消したいのです。その下の×ボタンの消し方はわかったのですが一番上の一番右にある×ボタン(Windowsxpでは赤いボタン)の消し方がわかりません。もちろんVBAを使ってかまいません。どうぞよろしくお願いします。

A 回答 (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自体を終了させるためのプロシージャが作れないと、結果的にはトラブルの元になりますので、ご注意ください。簡単なロジックの問題なのですが、慣れないと分らなくなることがあります。

なお、私は、仮に終了ボタンをどこかに置いても、右上の終了×ボタンを殺したりしません。そういうブックの作成にめぐり合わないだけかもしれませんが。
    • good
    • 0

うろ覚えですが、アプリケーション上及びVB、VBAで「×ボタン(閉じるボタン)」の機能を無効にする方法は無かったと思います。


APIに、このような機能があるのかも知れませんが、エンドユーザーを惑わすようなことは、やめた方が無難だと思います。
    • good
    • 0

今、WinXPのマシンを立ち上げていないのでXPでの確認はしていませんが



Win2000&EXCEL2000 でやってみたところ、全画面表示にすれば、エクセルの閉じるボタンは表示されないようでした。

これでは、ダメですか?

この回答への補足

早速の回答ありがとうございます。実はその方法は試してみたんですが、sheetの表示、非表示がVBAでうまくいかなくなってしまうんです。
Worksheets("データ").Visible = True
のところでエラーになってしまうんでなやんでいるんです。

補足日時:2005/09/15 00:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!