アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel VBA を用いて Excelのメニューバーの各項目の enable/disable 状態を変更する事は可能でしょうか?
(「編集」-「貼り付け」の許可/禁止の切り替えなど)
ご存知の方、教えてください。お願いします。

A 回答 (2件)

こんにちは。



Office 2003までに限られますが、

'標準モジュール
Sub Test1()
 Call MenuVisible(False) 'Off--False, On--True
End Sub
'
Sub MenuVisible(flg As Boolean)
With Application
 .CommandBars("Worksheet Menu Bar").Controls("編集(&E)") _
   .Controls("貼り付け(&P)").Enabled = flg '編集メニュー
 .CommandBars("Cell").FindControl(, 22).Enabled = flg '右クリックメニュー
 If flg Then
  Application.OnKey "^v"
 Else
  Application.OnKey "^v", "Dummy" 'ショートカットを無効

 End If
 End With
End Sub
'
Private Sub Dummy()
 Application.CutCopyMode = False
End Sub

'-------------------------------------------
'起動時は、
Sub Auto_Open()
  Call MenuVisible(False)
End if

'終了する場合は、
Sub Auto_Close()
  Call MenuVisible(True)
End if

'-------------------------------------------
とすれば可能です。

この回答への補足

ありがとうございます。
編集メニュー&右クリックメニューのロックができました。
そこで、補足で教えて下さい。
右クリックメニューのロックで使用している
FindControl(, 22)の引数の設定方法が調べたのですがわかりませんでした。
「22」は右クリックメニューの「編集」のことだと思いますが、数字の取得方法、もしくは一覧表のような物はあるのでしょうか。
又、第1引数は省略しない場合は何を設定するものなのでしょうか。
申し訳ありませんが、ご教示下さい。お願い致します。

補足日時:2010/01/03 08:03
    • good
    • 0
この回答へのお礼

年末のお忙しい中、早速の回答ありがとうございます。
教えていただいた方法で試してみます。

お礼日時:2009/12/31 21:45

こんにちは。



返事が遅くなりました。

>FindControl(, 22)の引数の設定方法が調べたのですがわかりませんでした。
「22」は右クリックメニューの「編集」のことだと思いますが、数字の取得方法、もしくは一覧表のような物はあるのでしょうか。

こういう質問をする人は、何年ぶりでしょうか?こういう質問は、大歓迎です。

私が、入門当事は、本の巻末に出ていましたので、それを参考にしました。しかし、私がマクロで作りましたので、ここに出しておきます。それを、ブックにコントロールリストにしても良いと思います。(ほかにも、エラーリストがマクロで出せます。Err.Number と、Err.Description で、1から10000ぐらいをループさせるだけですが。)

このマクロは、時間が掛かります。
'-------------------------------------------
'メニューコントロール一覧リスト作成
Sub ControlListsShowup()
Dim c As Variant
Dim n As Variant
Dim i As Long
 Application.ScreenUpdating = False
 On Error Resume Next
  Cells(1, 1).Resize(, 3).Value = Array("CommandBar", "Control", "ID")
  i = 2
  For Each c In CommandBars
     Cells(i, 1).Value = c.Name
   For Each n In c.Controls
     Cells(i, 2).Value = n.Caption
     Cells(i, 3).Value = n.ID
     i = i + 1
   Next n
  Next c
 On Error GoTo 0
  Application.ScreenUpdating = True
End Sub
'-------------------------------------------

今回の質問というのは、少し特殊で、抜け落ちは許さないという種類のものだと思います。その場合は、「編集」というキャプションをすべて探します。

>又、第1引数は省略しない場合は何を設定するものなのでしょうか。

第1引数は、MsoControlType とヘルプには出ていますが、msoControlButtonなどの種類で、それは、規定のコントロールの場合は指定する必要がありません。

expression.FindControl(Type, Id, Tag, Visible, Recursive)

次のTag というのは、ユーザーが設定したメニューコマンドの場合に、Add で設定するときに、ついでにTag にユニークな名前をつけておいて、後で、変更したり、メニューを解除したりするときに、そのTag で呼び出します。他は、使ったことがありません。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
メニューコントロール一覧のリストを出力することができました。
一覧表を用いて確認することにより「抜け落ち」を防ぐことができますね。
初心者にも親切な回答をありがとうございました。

お礼日時:2010/01/04 11:46

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