• ベストアンサー

マクロ(メニュー選択できないような)を教えてください。

エクセル2003や2007でセル上で右クリックしたときに、 表示されるインスタントメニューで、切り取り(T) をグレー表示にして選択できないようなマクロを次のようにしてあります。 同様に、コピー(C)、貼り付け(P)、形式を選択して貼り付け(S)もグレー表示にして選択できないようにしたいと思います。 マクロ記述を教えてください。よろしくお願いします。 Sub MenuOff() Dim CBar Set CBar = Application.CommandBars("Cell").Controls With CBar For i = 1 To .Count If (.Item(i).Caption Like "切り取り*") Then .Item(i).Enabled = False Exit For End If Next i End With End Sub

質問者が選んだベストアンサー

  • ベストアンサー
noname#130090
noname#130090
回答No.2

ごめんなさい寝ぼけていて「形式を選択して貼り付け」を忘れていました。 あと、Exit For は それほど必要性を感じなかったのではずしました。 Sub MenuOff()   Dim CBar   Set CBar = Application.CommandBars("Cell").Controls   With CBar     For i = 1 To .Count       If (.Item(i).Caption Like "切り取り*") Then         .Item(i).Enabled = False       ElseIf (.Item(i).Caption Like "コピー*") Then         .Item(i).Enabled = False       ElseIf (.Item(i).Caption Like "貼り付け*") Then         .Item(i).Enabled = False       ElseIf (.Item(i).Caption Like "形式を選択して貼り付け*") Then         .Item(i).Enabled = False       End If     Next i   End With End Sub

mszjmszj
質問者

お礼

ありがとうございました。どうも2007では右クリックメニューは、VBAでカスタマイズできないようです。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 すでに回答がついていますが、広範囲のメニューを探す場合には、ループが必要ですが、ひとつのメニューでは、IDで、プロパティを変えていけばよいと思います。 '------------------------------------------- '標準モジュールが良い Sub Main()   ControlAvailable False '戻す時は、True を指定 End Sub Sub ControlAvailable(flg As Boolean)  With Application.CommandBars("Cell")    .FindControl(, 19).Enabled = flg 'コピー    .FindControl(, 21).Enabled = flg '切り取り    .FindControl(, 22).Enabled = flg '貼付け    .FindControl(, 755).Enabled = flg '形式を選択-貼付け  End With End Sub '----------------------------------------

mszjmszj
質問者

お礼

ありがとうございました。どうも2007では右クリックメニューは、VBAでカスタマイズできないようです。

noname#130090
noname#130090
回答No.1

こんなもんでどうでしょうか? Sub MenuOff()   Dim CBar   Set CBar = Application.CommandBars("Cell").Controls   With CBar     For i = 1 To .Count       If (.Item(i).Caption Like "切り取り*") Then         .Item(i).Enabled = False       ElseIf (.Item(i).Caption Like "コピー*") Then         .Item(i).Enabled = False       ElseIf (.Item(i).Caption Like "貼り付け*") Then         .Item(i).Enabled = False         Exit For       End If     Next i   End With End Sub

関連するQ&A

  • Excel VBAでツールバーにマクロを登録したい

    自作のツールバーをブックに添付し、 スタートアップにマクロを書いたブックを保存し(起動して非表示にしてあります)、 そのマクロをツールバーの各ボタンに登録しようとしています。 下記のようなコードを書いたのですが、ツールバーに作成したボタンにはマクロが登録できるのですが、 サブメニュー内のボタンには登録できません。 Dim MyWB, NBar MyWB = "stampB.xls" NBar = "stampB1.0" For i = 1 To Application.CommandBars(NBar).Controls.Count  'ボタンのキャプションと同じ名前のマクロを登録  With Application.CommandBars(NBar).Controls.Item(i)   .OnAction = MyWB & "!" & .Caption  End With Next i これをどのように改良したら、サブメニュー内のボタンにもマクロを登録できるようになりますでしょうか? ご存知の方どうぞよろしくお願いします。

  • 再質問:ツールバーを非表示にするマクロ

    bonaronさんありがとうございます。 以下のコードで、ツールバーの非表示→表示がOKになったのですが、ファイル起動時にツールバーを非表示にして、ファイル終了時にツールバーを元に戻したいと思っています。よって、以下のコードを非表示にするコード、元にもどすコードの二つに分けたいのですができません。 非表示にするためには、 .CommandBars(i).Visible = False End If Next i End With End Sub で閉じればできるのですが、元に戻すコードの方はどのように書いたら良いのでしょうか?ご教授願います。 ////////////////////////////////////////////// Sub Test() Dim i, p(50), ToolCount With Application MsgBox "ツールバーを非表示にします。" 'カウンター変数の初期化 ToolCount = 0 '<------ For i = .CommandBars.Count To 2 Step -1 If .CommandBars(i).Visible = True Then ' カウンター変数1UP ToolCount = ToolCount + 1 '<--- この位置 '表示されていたら配列pにインデックスを書き込んで 'そのコマンドバーを非表示にする。 p(ToolCount) = i .CommandBars(i).Visible = False End If Next i MsgBox "ツールバーを元に戻します。" For i = 1 To ToolCount '配列pに書き込まれたインデックスを読み込んで 'そのコマンドバーを表示する。 .CommandBars(p(i)).Visible = True '<--- Next i End With End Sub

  • ツールバーを非表示にするマクロ

    あるHPで以下のコードを見つけて試してみました。 起動時に表示しているツールバーは消えるのですが、ファイルを閉じた場合に別のツールバーが開いてしまいます どこかコードがおかしいのでしょうか? 当方EXCEL2000です。 http://excelfactory.net/excelvbatips/application/apli_11.htm Sub Test() Dim i, p(50), ToolCount With Application MsgBox "ツールバーを非表示にします。" ToolCount = 1 'カウンター変数の初期化 For i = .CommandBars.Count To 2 Step -1 If .CommandBars(i).Visible = True Then p(ToolCount) = i .CommandBars(i).Visible = False '表示されていたら配列pにインデックスを書き込んで 'そのコマンドバーを非表示にする。 ToolCount = ToolCount + 1 ' カウンター変数1UP End If Next i MsgBox "ツールバーを元に戻します。" For i = 1 To ToolCount .CommandBars(i).Visible = True '配列pに書き込まれたインデックスを読み込んで 'そのコマンドバーを表示する。 Next i End With End Sub

  • エクセル2003 自作ツールバー(コマンドバー)の選択戻り値取得方法

    ツールバーのショートカットを自作して 入力を楽にしようと考えております。 ツールバーには、直接入力するリストを表示させ そのリストの中から選んで、セルに記入させると 言うマクロを作ろうとしているのですが、 選択された、リストの戻り値を取れないため、 苦戦しております。 戻り値の取得方法とかあるのでしょうか? 宜しくお願いいたします。 コードを以下に記します。 Option Explicit Option Base 1 Dim myCB As CommandBar Dim myCBCtrl As CommandBarButton Dim myData() As String Dim n As Integer, i As Integer ---------------------------------------------------------------- Sub AddCmdBarBtn() Call 配列 On Error Resume Next CommandBars("MyMacro2").Delete Set myCB = Application.CommandBars.Add(Name:="MyMacro2", _ Position:=msoBarPopup, Temporary:=True) For i = 1 To 5 Set myCBCtrl = myCB.Controls.Add(Type:=msoControlButton) With myCBCtrl .Caption = myData(i) .OnAction = "ツールバーマクロ" End With Next i myCB.ShowPopup End Sub ---------------------------------------------------------------- Private Sub ツールバーマクロ() ActiveCell.Value = myCB.Controls.Item.Caption<<<此処を上手く処理できません(泣) End Sub ---------------------------------------------------------------- Private Sub 配列() ReDim myData(5) For n = 1 To 5 myData(n) = "名前" & n Next n End Sub ---------------------------------------------------------------- このマクロを右クリックイベントで使って行きたいと考えている のですが。

  • Excel2003で作成したマクロが2000で不具合が生じました。

    Excel2003で作ったマクロを2000で実行したところこの命令でエラーになってしまいました。恐らく参照設定の問題だと思いますが、どの参照が問題なのでしょうか?   If Environ("COMPUTERNAME") = "Z7890580" Then     Exit Sub   End If このVBAのブックの特定のシートで右クリックでオプション選択できるようになっていましたが、上記エラーが生じた後、そのPCでエクセルを実行すると、このブックを閉じても常に右クリックするとオプションが表示されるようになってしまいました。 どのようにすれば出ないようになるのでしょうか? よろしくお願い申し上げます。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)   Application.CommandBars("Cell").Reset   With Application.CommandBars("Cell").Controls.Add     .BeginGroup = True     .Caption = "ReadOnlyで開く"     .FaceId = 59     .OnAction = "Selection_File_Open"   End With End Sub

  • エクセル2007で自前のツールバーを作る方法

    エクセル2000です。 以下のマクロで自前の新しいツールバーが作れ、作動します。 ところがエクセル2007ではうんともすんとも言ってくれません。 エクセル2007で使う場合はどのようにしたらよいでしょうか? ユーザーフォームで似たようなものを作る方法はわかるのですが、できれば以下の方法を使いたいのです。 Sub 三択メニュー() On Error Resume Next Application.CommandBars("選択します").Delete On Error GoTo 0 Application.CommandBars.Add Name:="選択します", Position:=msoBarFloating With Application.CommandBars("選択します") .Visible = True .Controls.Add Type:=msoControlButton With .Controls(1) .Style = msoButtonCaption .Caption = "⇒メニュー1 " .OnAction = "Msg_1" End With .Controls.Add Type:=msoControlButton With .Controls(2) .Style = msoButtonCaption .Caption = "⇒メニュー2 " .OnAction = "Msg_2" End With .Controls.Add Type:=msoControlButton With .Controls(3) .Style = msoButtonCaption .Caption = "⇒メニュー3 " .OnAction = "Msg_3" End With End With End Sub Sub Msg_1() Application.CommandBars("選択します").Delete MsgBox "追加コマンド1を処理しました。" End Sub Sub Msg_2() Application.CommandBars("選択します").Delete MsgBox "追加コマンド2を処理しました。" End Sub Sub Msg_3() Application.CommandBars("選択します").Delete MsgBox "追加コマンド3を処理しました。" End Sub

  • メニュー登録のマクロの書き方

    エクセルを開いた時のツールバーで、 「ファイル」を選択すると「新規作成」などのメニューが出ますよね。 その中に「印刷範囲」というメニューがあり、 これにカーソルを合わせると更に右に「印刷範囲の設定」「印刷範囲のクリア」というメニューが出てきます。 この、2階層持つメニューをマクロで作成したいのですが、可能でしょうか。 1階層だけであれば、 Set menu1 = Application.CommandBars("worksheet menu bar"). _ Controls.Add(Type:=msoControlPopup, Temporary:=True) menu1.Caption = "ツールバーに表示させるメニュー名" .Controls.Add Type:=msoControlButton With .Controls(1) .Caption = "メニュー1" .OnAction = "メニュー1のマクロの名前?" End With という記述で実現できました。

  • エクセルのマクロについて

    Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "ア") = 0 Then If InStr(.Cells(i, "D"), "ア(半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub このエクセルマクロはC列に「ア」があって、D列に「ア(半角)」の文字がない場合はメッセージというマクロなのですが、このマクロをア~ンまで同じ作業をしたいのですが、ひとまとめにマクロを組む事はできるのでしょうか?できる場合どのようにすれば良いでしょうか? 下記のようにして見たのですができませんでした。 Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "[ア-ン]") = 0 Then If InStr(.Cells(i, "D"), "[ア-ン](半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub

  • エクセル マクロ フォームにて

    エクセル マクロの記述教えて下さい! 1)エクセル Sheet1にコマンドボタンをクリックにてフォームが表示 2)UserForm1にコマンドボタンクリックにてUserForm2が表示 3)UserForm2に   OptionButton1(1、血圧)   OptionButton2(2、体温)   OptionButton3(3、脈)  と選択させてTextBox1に(1又は2・3)のみの数字番号だけ  表示させたい!  1の数字の場合は赤文字、2なら青文字にしたい! 4)UserForm2にコマンドボタンをクリックするとUserForm1の  TextBoxに数字(1~3)をそのまま表示させたい! すいません!分かりづらいですか?・・・今の段階での記述がこれです!が、下記の場合だと3)が文字(1、血圧)しか出来ません。 これを数字に認識させたいです! Private Sub CommandButton1_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 3 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "ひとつも選択されていません" Exit Sub End If With UserForm1 .TextBox1.Value = Me.Controls("OptionButton" & Cnt).Caption End With Unload Me End Sub 色々追加記述が必要ですが、頭が混乱しています! 是非、教えて下さい!

  • エクセル マクロ オプションボタン

    エクセル上にユーザーフォーム1を作り OptionButton1~4作成 Captionには OptionButton1)あ OptionButton2)い OptionButton3)う OptionButton4)え と名前を付けてOptionButton1をクリックすると TextBox1に”あ”と表示するようにしたいです! お願いします! 教えて下さい。 {宣言は何?} Dim i As Integer Dim s1 As String For i = 1 To 3 Step 1 s1 = Me.Controls("OptionButton" & i).Caption If Me.Controls("optionbutton" & i) = True Then With UserForm1 .TextBox1.Value = s1 End With End If Next i End Sub 上記の記述では無理でした! 教えて下さい。

専門家に質問してみよう