- - PR -
excelメニュー
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-04-24 19:43
質問させていただきます。
A.xls、B.xlsファイルがあります。 A.xlsには Private Sub Workbook_Open() With Application.CommandBars("worksheet menu bar") On Error Resume Next .Controls("メニュー(&T)").Delete With .Controls.Add(Type:=msoControlPopup, Temporary:=True) .FaceId = 59 .BeginGroup = True .Caption = "メニュー(&T)" With .Controls.Add(Type:=msoControlButton, Temporary:=True) .Caption = "テスト用" .OnAction = "SubTest" End With End With End With Exit Sub End Sub と Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.CommandBars("Worksheet Menu Bar").Controls("メニュー(&L)").Delete End Sub のマクロを書いてます。 A.xlsをOPEN時、メニューを作って、Closeするとき、メニューをクリアする処理です。 B.xlsにはなんにも書いていません。(マクロありません) たとえば、A.xlsとB.xlsをひとつのExcelアプリケーションで両方開いている際、 (当然Excelアプリケージョンにはメニューが作られている状態) Excelアプリケージョンを閉じよう「x」をクリックすると、変更確認(はい、いいえ、キャンセル)ダイアログボックスが出てくる前に、上記のWorkbook_BeforeCloseが実行されてしまい、メニューがクリアされてしまいます。 変更確認画面でキャンセルを選択することも考えられるので、この動きではまずいです。 宜しくお願い致します | ||||||||||||||||
|
投稿日時: 2006-04-24 20:07
自前のメッセージを BeforeClose イベントに書き、 [はい] の場合のみ BeforeClose イベントを続行。 それ以外の場合は、Cancel = True。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-04-24 22:48
じゃんぬねっと様
ご返答ありがとうございます。 すみません。 説明が不十分だったようです。 引用: ------------------------------------------------------------------------------- Excelアプリケージョンを閉じよう「x」をクリックすると、変更確認(はい、いいえ、キャンセル)ダイアログボックスが出てくる前に、上記のWorkbook_BeforeCloseが実行されてしまい、メニューがクリアされてしまいます。 変更確認画面でキャンセルを選択することも考えられるので、この動きではまずいです。 ------------------------------------------------------------------------------- ここで言う変更確認ダイアログボックスは、A.xls または B.xlsに何らかの編集をしたあと、閉じようとして出てくるもので、Excelアプリケーションが出しているものです。 私が書いたコードではありません。 この場合でも、はい、いいえ、キャンセルのRETURN値を拾えるんでしょうか? 拾えるなら、こんな感じになると思いますが、、 Private Sub Workbook_BeforeClose(Cancel As Boolean) if (???=vbyes) or (???=vbno) then Application.CommandBars("Worksheet Menu Bar").Controls("メニュー(&L)").Delete else cancel =true endif End Sub if行の部分、どうなりますか? もう一度お願いいたします。 | ||||||||||||||||
|
投稿日時: 2006-04-25 00:55
この前に、自分で Msgbox 出せばいいだけでしょう。 ちなみに、Excel が出す変更確認 dialog は、BeforeClose event が発生した後に 実行されるので、戻り値が取得できるわけがありません。 # だから、BeforeClose なんですが・・・ | ||||||||||||||||
|
投稿日時: 2006-04-25 07:59
大丈夫です、説明は十分だったと思います。
これは、最初のご投稿で把握しております。
私は Excel から出されるダイアログ ボックスではなく、 > > 自前のメッセージを BeforeClose イベントに書き と言っていますので、下記のようになります。(下記のような意味です)
すみません。 どちらかと言えば、私の説明が不十分だったようです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-04-25 10:36
じゃんぬねっと様
いつも親切なご返事感謝しております。 引用: ------------------------------------------------------------------------------ すみません。 どちらかと言えば、私の説明が不十分だったようです。 ------------------------------------------------------------------------------- いいえ、こちらがちゃんと読んでいないし、理解が足りなかったです。 有り難うございます。 |
1