戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
右クリックメニューの削除

    [191961] 右クリックメニューの削除-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ けん -(2020/05/14(18:24))
    □U R L/
      お世話になります。
      
      けんです。
      
      シートの右クリックメニューで、2階層まで選択項目を設定し、3階層目に選択ボタン
      を配置しています。
      2階層目の選択項目をそれぞれ選択していくと一回選択した項目の3階層目の項目が
      増加していきます。
      3階層目には、一旦項目を削除し再度項目読込をしていますが、削除できず項目が増加
      しているようです。
      ネットに記載していたものを利用して作成しましたが、知識不足により解決できない
      状況です。
      項目の削除方法についてお教えください。
      
      '******************************************************************************
      Function itemDisp2()
       Dim cmdBa As CommandBar, rng As Range, myRow As Long, i As Long
      
          Set rng = Sheet5.Cells.Find("数式記号")
          myRow = Sheet5.Cells(Rows.Count, rng.Column).End(xlUp).Row
      
          On Error Resume Next
          For i = rng.Row + 1 To myRow
              With Application.CommandBars("Cell")
                  .Controls(item1).Controls(item2). _
                      Controls(Sheet5.Cells(i, rng.Column)).Delete
              End With
          Next i
          
          item1 = Application.CommandBars.ActionControl.Parent.Parent.Caption
          item2 = Application.CommandBars.ActionControl.Caption
          
          For i = rng.Row + 1 To myRow
              With Application.CommandBars.ActionControl.Controls. _
                          add(msoControlButton, , , , True) 'サブメニュー
                  .Caption = Sheet5.Cells(i, rng.Column)
                  .OnAction = "'itemWrite'"
              End With
          Next i
      
      End Function
      '******************************************************************************
      
      
      初心者で申し訳ありませんが、よろしくお願いいたします。
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191963] Re[1]: 右クリックメニューの削除-

    記事引用/メール受信=OFF■

    □投稿者/ kazuo -(2020/05/14(22:06))
    □U R L/

      >ネットに記載していたものを利用して作成しましたが
      何がしたいのか解りませんので、
      先頭のhは削除して、元ネタのUrlを張ってください。
      また、excelのバージョンを記載ください。




    [191967] Re[2]: 右クリックメニューの削除-

    記事引用/メール受信=OFF■

    □投稿者/ チオチモリン -(2020/05/15(08:20))
    □U R L/
       >項目が増加している
       ↓でメニューを追加していますが、意図する内容ですか?
      
       For i = Rng.Row + 1 To myRow
           With Application.CommandBars.ActionControl.Controls. _
               Add(msoControlButton, , , , True) 'サブメニュー
               .Caption = Sheet5.Cells(i, Rng.Column)
               .OnAction = "'itemWrite'"
           End With
       Next i
      
       Rng.Row + 1 と myRow の値が分らないので?ですが、問題はありませんか?
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191987] Re[3]: 右クリックメニューの削除-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ けん -(2020/05/15(20:49))
    □U R L/
      kazuo様、チオチモリン様
      
      有難う御座います。
      
      遅くなりましたが、利用したものは次のURLです。
      www.excel.studio-kazu.jp/kw/20150802235219.html
      EXCELバージョンは「2016(365)」
      
      やりたいことは、メニューに表示された項目を選択し、選択した項目をシートに書き込む
      ことです。
      
           A列    B列     C列     D列           G列
          ---------------------------------------  -------------
          項目名1 項目名2 項目名3 項目名4     数式記号
                1-1    2-1       3-1       4-1            〇
                1-2       2-2       3-2       4-2            ×
                          2-3       3-3       4-3            ▽
                          2-4                                □
                 2-5
      
      右クリックで(セルの場所で項目名は変化します。)
      
            階層1     階層2      階層3
               ---------------------------------------
          「項目名3」 → 「3-1」 → 「〇」
                   「3-2」   「×」
                   「3-3」   「▽」
                          「□」
      
      それぞれ選択し、最後記号を選択するとシートに「3-1〇」と書き込む。
      
      質問は、階層2を「3-1」→「3-2」→「3-1」に戻すと階層3の数式記号の4つの記号
      が倍に表示されることです。(繰り返す毎に倍々になっていきます。)
      階層2も同様、倍に表示されますが、階層3の不具合が解消されればと思っています。、
      
      
      チオチモリン様から追加しているとありますが、その前に一旦項目を削除しているので
      すが、削除されていない状況です。
      
      「Rng.Row + 1 と myRow」は、検索した「数式記号」の行を取得、基準とし階層2の
      データを取得しています。
      
      説明不足かもしれませんが、よろしくお願いいたします。
       
      




    [191990] Re[4]: 右クリックメニューの削除-

    記事引用/メール受信=OFF■

    □投稿者/ kazuo -(2020/05/16(07:02))
    □U R L/
      孫は子供を削除してしまえば問題無く消えるでしょう。
      該当シートモジュールへ
      
      Private 項目 As Range
      
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          Const 範囲 = "A1:D6"    '要変更 階層1発動範囲
          If Target.Count <> 1 Then Exit Sub
          If Not Intersect(Target, Range(範囲)) Is Nothing Then
              delMenue
              Set 項目 = Target.EntireColumn.Cells(1)
              階層1
          End If
      End Sub
      
      Private Sub delMenue()
          Application.CommandBars("Cell").Reset
      End Sub
      
      Private Sub 階層1()
          If Not ActiveSheet Is Me Then
              delMenue
              Exit Sub
          End If
          With Application.CommandBars("Cell").Controls.Add(Before:=1, Type:=msoControlPopup)
              .Caption = 項目.Value
              .OnAction = Me.CodeName & ".階層2 "
          End With
      End Sub
      
      Private Sub 階層2()
          子供削除
          For i = 1 To 項目.End(xlDown).Row - 1
              With Application.CommandBars.ActionControl.Controls.Add(msoControlPopup, , , , True) 'サブメニュー
                  .Caption = 項目.Offset(i)
                  .OnAction = Me.CodeName & ".階層3"
              End With
          Next
      End Sub
      Private Sub 階層3()
          Dim r As Range
          子供削除
          Set r = Cells.Find("数式記号", , xlValues, xlWhole)
          For i = 1 To r.End(xlDown).Row - 1
              With Application.CommandBars.ActionControl.Controls.Add(msoControlButton, , , , True)
                  .Caption = r.Offset(i)
                  .OnAction = Me.CodeName & ".記入"
              End With
          Next
      End Sub
      Private Sub 記入()
         ActiveCell.Value = Application.CommandBars.ActionControl.Parent.Parent.Caption & _
                              Application.CommandBars.ActionControl.Caption
      End Sub
      
      Private Sub 子供削除()
          Dim q As CommandBarControl
          For Each q In Application.CommandBars.ActionControl.Controls
              q.Delete
          Next
      End Sub
      
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191996] Re[5]: 右クリックメニューの削除-

    記事引用/メール受信=OFF■

    □投稿者/ けん -(2020/05/16(14:00))
    □U R L/
      kazuo様
      
      回答、有難う御座います。
      
      
      動作を確認いたしました。
      項目の増加もなく、思い通りの結果です。
      
      項目をRenge配列で、「Value」「Offset」
      「Find」の「Offset」参考になります。
      
      少しお教えしていただきたい事項があります。
       ●Application.CommandBars("Cell").Reset は、
        アドインとかで設定されているメニューも消えてしまうとあり、右クリックメニュー
        に使用したものだけを削除しようとしていました。
        Resetでも問題ないと思いますが、使用したものだけの削除方法をお教えください。
      
        子供削除で
        For Each q In Application.CommandBars.ActionControl.Controls
        項目を取得していますが、階層1、2も取得はできるのでしょうか。
      
      すみませんが、よろしくお願いいたします。
      
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191998] Re[6]: 右クリックメニューの削除-

    記事引用/メール受信=OFF■

    □投稿者/ kazuo -(2020/05/16(14:50))
    □U R L/
      >Application.CommandBars("Cell").Reset は、
      >  アドインとかで設定されているメニューも消えてしまうとあり、右クリックメニュー
      >  に使用したものだけを削除しようとしていました。
      どこにありました?
      アドインにも右クリックメニュー登録が有ると言うことですか?
      変更点のみ
      
      Private 項目 As Range
      Private myCommand As CommandBarControl
      
      Private Sub delMenue()
          If Not myCommand Is Nothing Then myCommand.Delete
      '   途中でバグると上記では以前の階層1が残ってしまいます。どこかに残しておいた方が良いかも
      '    Application.CommandBars("Cell").Reset
      End Sub
      
      Private Sub 階層1()
          If Not ActiveSheet Is Me Then
              delMenue
              Exit Sub
          End If
          Set myCommand = Application.CommandBars("Cell").Controls.Add(Before:=1, Type:=msoControlPopup)
          With myCommand
              .Caption = 項目.Value
              .OnAction = Me.CodeName & ".階層2 "
          End With
      End Sub
      
      >子供削除で...項目を取得していますが、階層1、2も取得はできるのでしょうか。
      意味不明です。  
      階層1から見れば、階層3は孫、階層2は子供ですが、階層2から見れば、階層3は子供ですし、
      階層3から見れば、階層1は親の親、階層2は親ですが、階層2から見れば、階層1は親です。
      記入が解っていないのでしょうか?
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191999] Re[7]: 右クリックメニューの削除-

    記事引用/メール受信=OFF■

    □投稿者/ チオチモリン -(2020/05/16(15:01))
    □U R L/
      お話が進んでいるようですが
      
      もしかして ↓
      
      Function itemDisp2A()
          Dim cmdBa As CommandBar, rng As Range, myRow As Long, i As Long
      
          Set rng = Sheet5.Cells.Find("数式記号")
          myRow = Sheet5.Cells(Rows.Count, rng.Column).End(xlUp).Row
      
      '    On Error Resume Next ■■■ コメントアウト
          item1 = Application.CommandBars.ActionControl.Parent.Parent.Caption '■■■位置修正
      '   item2 = Application.CommandBars.ActionControl.Parent.Caption        '      位置修正 Parent 追加
          item2 = Application.CommandBars.ActionControl.Caption               '■■■位置修正 kazuoさん(2020/05/16(19:51)) のコメント等を読んで復元
          For i = rng.Row + 1 To myRow
              With Application.CommandBars("Cell")
                  .Controls(item1).Controls(item2). _
                      Controls(Sheet5.Cells(i, rng.Column)).Delete
              End With
          Next i
          
          
          For i = rng.Row + 1 To myRow
              With Application.CommandBars.ActionControl.Controls. _
                          Add(msoControlButton, , , , True) 'サブメニュー
                  .Caption = Sheet5.Cells(i, rng.Column)
                  .OnAction = "'itemWrite'"
              End With
          Next i
      
      End Function
      
      〜〜〜〜〜〜
      
      >On Error Resume Next
       は、デバッグ時には コメントアウト してください。
       エラーが隠れてわからなくなります。
      
      ※ 動的にメニューを変更しようとしているんでしょうか?
        提示のコードと説明を読んでもよくわかりませんので推測ですが..
      
      ※2 2020/5/17 一部修正しました。
         こちらでは試せませんのでこれも多分?です。
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [192001] Re[8]: 右クリックメニューの削除-

    記事引用/メール受信=OFF■

    □投稿者/ けん -(2020/05/16(18:26))
    □U R L/
      kazuo様
      
      回答、有難う御座います。
      
      あまり理解していなくて申し訳ありません。
      
      先ずアドインですが、本エクセルでは使用していませんが、調べているときに記載が
      ありましたのでメニューに使用した項目の削除を検討しました。
      
      excelwork.info/excel/shortcutmenu/
      「ショートカットメニュー(コンテキストメニュー)を初期化」
       ショートカットメニュー(コンテキストメニュー)を初期状態に戻すに
       は、CommandBar オブジェクト の Reset メソッド を使用します。ただし、
       アドインを設定した時に登録されたコマンドなども消えてしまうので使用時
       には注意が必要です。」
      
      親子関係ですが、階層2の子供削除で階層2の項目が削除、階層3の子供削除で孫の
      項目が削除されるとの認識で宜しいでしょうか。
      一つ疑問なのですが、
      プロシージャ「階層3」「子供削除」にブレークポイントを置き、子供削除の動作を
      確認すると、項目が無く
      For Each q In Application.CommandBars.ActionControl.Controls
      がスキップします。
      中断モードだからでしょうか。
      
      今回追加いただいた
      「If Not myCommand Is Nothing Then myCommand.Delete」
      は、階層1の親を削除しているということでしょうか。
      
      教えていただきたかった
      >子供削除で...項目を取得していますが、階層1、2も取得はできるのでしょうか。
      は、「Rset」を使用しない方法を検討するためで、提示いただいたコードで動作確認し
      ましたので「Reset」以外で使用していきます。
      (ただし、「Reset」は残しておきます。)
      
      
      チオチモリン様
      
      回答、有難う御座います。
      
      いただいたコードにて確認したところ
      item2 = Application.CommandBars.ActionControl.Parent.Caption 
      で、「メソッドまたはデータメンバーが見つかりません。」となります。
      
      kazuo様からいただいたコードにて思い通りの結果を得ておりますので、こちらの方で
      進めたいと思います。
      ご対応有難う御座います。
      
      
      理解不足で申し訳ありませんが、宜しくお願いいたします。
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [192002] Re[9]: 右クリックメニューの削除-

    記事引用/メール受信=OFF■

    □投稿者/ kazuo -(2020/05/16(19:51))
    □U R L/

      >先ずアドインですが・・・
      あくまで、CommandBars オブジェクトでは無く、CommandBar オブジェクトですので、
      CommandBars("Cell")を設定していなければ新しいメニューなどは影響されません。

      >親子関係ですが、階層2の子供削除で階層2の項目が削除・・・・
      そうです。まず、全て消してから追加し直しています。
      >項目が無く・・・
      戻った時に増えてしまう問題対策ですよね。
      Debug.Print q.Caption
      とか入れてみてください。

      >階層1の親を削除しているということでしょうか
      階層1のCommandBarControlを削除しています。
      階層1の親はCommandBars("Cell").Contorolsです。

      先の親子の説明紛らわしかったですね。
      Controls.Add でCommandBarControl(階層1)ができますが、それは削除出来ない空のcontrolsを持っています。
      さらにControls.Add でCommandBarControl(階層2)ができますが、それは削除出来ない空のcontrolsを持っています。
      さらにControls.Add でCommandBarControl(階層3)を作っています。
      従って、元ネタのβさんの説明のように
      階層3の親は階層2のcontrols
      その親は階層2
      その親は階層1のcontrols
      その親は階層1
      1階層上がるには2親(Parent)必要です




    [192004] Re[10]: 右クリックメニューの削除-

    記事引用/メール受信=OFF■

    □投稿者/ けん -(2020/05/17(10:11))
    □U R L/

      kazuo様

      質問に対する丁寧な説明をいただき、有難う御座います。
      親子関係につきましては、イメージ的には何となく理解できましたが、今後、いただいた
      コードを利用し使用環境に変えていく中で理解を深めていきたいと思います。
      解決といたしますが、使用環境に変えていくにあたり、不明点・不具合等があれば対応等
      をお願いいたします。

      kazuo様、チオチモリン様 有難う御座いました。




このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G