Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
サンプルマクロが有効にならない
投稿日時: 20/05/16 12:33:34
投稿者: taichi

win10 EXCEL2016
sheet数が多いBOOKで全てのSheet名が見えない状態なので、ショートカットメニューに
msoControlComboBoxを追加すし各sheet名を登録しジャンプさせるために
mougの中のサンプルマクロ「新しいコマンドバーを作成する(Excel 2000)」
https://www.moug.net/tech/exvba/0080016.html
試したところエラーもでませんが.Visible = Trueにもかかわらず表示されません。
 
以下のコードをそのままコピペしています。 よろしくお願いいたします。
Sub AddSamp1()
  Dim myCB As CommandBar
 
 On Error Resume Next '---ツールバー削除時にエラーが発生しても無視
 CommandBars("Sample").Delete '---同名のツールバーを削除
 Set myCB = CommandBars.Add(Name:="Sample", _
    Position:=msoBarFloating, MenuBar:=False, Temporary:=True)
   '---(1)ユーザー定義のツールバーを作成し、変数myCBに格納
 With myCB '---作成したツールバーに対して
    .Controls.Add Type:=msoControlButton, ID:=21, before:=1
    '---(2)1番めの位置にID:=21(切り取り)ツールバーボタンを作成
    .Controls.Add Type:=msoControlEdit, before:=2
    '---2番めの位置にエディットボックスを作成
    .Controls.Add Type:=msoControlDropdown, before:=3
    '---3番めの位置にドロップダウンリストボックスを作成
    .Controls.Add Type:=msoControlComboBox, before:=4
    '---4番めの位置にコンボボックスを作成
    .Controls.Add(Type:=msoControlPopup, before:=5).Caption = "Popup"
    '---5番めの位置にサブメニューを持つメニューを作成
    .Visible = True '---作成したツールバーを表示する
 End With
End Sub

回答
投稿日時: 20/05/16 13:43:13
投稿者: 角田
投稿者のウェブサイトに移動

Excel2007 以降では
CommandBar メニューは 「アドイン」タブ内 に作られます

回答
投稿日時: 20/05/16 14:21:16
投稿者: WinArrow
投稿者のウェブサイトに移動

このサンプルは、
ユーザー定義のコマンドバーを作成するための、入り口のサンプルで、
あなたがやりたいことをサンプル化したものではありません。
コマンドバーには、いくつかのコントロールがあるので、
そのコントロールの種類だけを説明しています。
  
このマクロを実行すると
「アドイン」タブが作成されます。
  
しかし、このサンプルは、コマンドコントロールの種類だけを作成するのみで、
コマンドコントロールをクリックしても、何も実行されません。
  
それは、コマンドコントロールの中身が作成されていないからです。
  
中身とは、
 今回のあなたの希望するところは、シート名リスト
 が設定されていないことと、クリックしたときに実行するマクロ名です。
 

回答
投稿日時: 20/05/16 15:07:51
投稿者: WinArrow
投稿者のウェブサイトに移動

参考コード
 
Sub setSheetName()
Dim myCB As CommandBar
Dim mysht As Worksheet
 
    On Error Resume Next '---ツールバー削除時にエラーが発生しても無視
    CommandBars("Sample").Delete '---同名のツールバーを削除
    Set myCB = CommandBars.Add(Name:="Sample", _
        Position:=msoBarFloating, MenuBar:=False, Temporary:=True)
    With myCB
        With .Controls.Add(Type:=msoControlComboBox)
            For Each mysht In ThisWorkbook.Sheets
                .AddItem mysht.Name
            Next
            .OnAction = "sltSHT"
            .Text = "シート名選択"
        End With
        .Visible = True
    End With
         
     
End Sub
 
 
Sub sltSHT()
    ThisWorkbook.Sheets(Application.CommandBars.ActionControl.Text).Activate
End Sub

回答
投稿日時: 20/05/16 15:21:59
投稿者: Moko

目的が
 
> sheet数が多いBOOKで全てのSheet名が見えない状態なので、ショートカットメニューに
msoControlComboBoxを追加すし各sheet名を登録しジャンプさせるために
 
ということなら、マクロを使わなくても
左下の シート移動ボタンを右クリックで「シートの選択」ダイアログが表示されますが
それじゃダメですか?

投稿日時: 20/05/17 11:16:44
投稿者: taichi

■ 角田さん ありがとうございます。
>Excel2007 以降では
>CommandBar メニューは 「アドイン」タブ内 に作られます
 「アドイン」タブが作成されているのにいるのに全く気がつきませんでした。
 これで何も変化がないと思ってしまいました。
以前はショートカットメニューに必要なこと(msoControlDropdownも)を追加していましたが、
msoControlButton 以外は「アドイン」タブに移動したようですね?
 
■ WinArrowさん ありがとうございます。
 参考コード 助かりました。
 
■ Moko さんありがとうございます。
 そうなんですけれども、他にも使い道がでるので、
 勉強のためにしたかったのです。