OS:windowsXP HomeEdition
ソフト:Excel2003
アドインを作成し配布したいのですが、xla形式で保存しエクセル上でアドインさせ、
作成したメニューからテスト起動させてみると、アドインの元のファイル(拡張子xls)が
展開してしまいます。展開させずにアドインプロシージャを起動させたいのですが
何が原因か調べてもわかりませんでした。知っている方、ご助言御願い致します。
以下に、私の作成したマクロを記述します。
マクロ解説HPで勉強しつつ作成致しました。
~~~~~~~~~~~~~~~~~~~~~~~~~
<ThisWorkBookへの記述>
Dim mySubMenu As CommandBarControl
Sub MakeSubMenu()
Dim myMenu As CommandBar
Dim cmdSubMenu As CommandBarControl
'すでにサブメニューがあれば削除する
DelSubMenu
Set myMenu = Application.CommandBars("worksheet Menu Bar")
Set mySubMenu = myMenu.Controls.Add(Type:=msoControlPopup)
mySubMenu.Caption = "メニュー"
Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton)
cmdSubMenu.Caption = "コマンド1"
'サブメニューでコマンド1を選択したとき cmd1() を呼び出す
cmdSubMenu.OnAction = "cmd1"
Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton)
cmdSubMenu.Caption = "コマンド2"
'サブメニューでコマンド2を選択したとき cmd2() を呼び出す
cmdSubMenu.OnAction = "cmd2"
End Sub
Sub DelSubMenu()
'メニューバーのサブメニューを削除する
On Error Resume Next
mySubMenu.Delete
End Sub
<標準モジュールへの記述>
Private Sub cmd1()
MsgBox "コマンド1を選択しました"
End Sub
Private Sub cmd2()
MsgBox "コマンド2を選択しました"
End Sub
~~~~~~~~~~~~~~~~~~~~~~~
尚、マクロは簡略化し、のせております。
よろしく御願い致します。
No.2ベストアンサー
- 回答日時:
>マクロは簡略化し、のせております。
とはいっても、出来る限り、イベントのひとつぐらいは省略しないでほしいです。コードが読めなくなります。
問題点は、片方のプロシーシャを、ThisWorkbook モジュールに入れておいて、
標準モジュールのPrivate キーワードを付けたプロシージャは、ThisWorkbookから、呼び出せませんね。
これを、同じThisWorkbookに入れるなら、そのままでも可能です。
>Private Sub cmd1()
> MsgBox "コマンド1を選択しました"
>End Sub
>Dim mySubMenu As CommandBarControl
それと、これは、モジュール・スコープの変数にする必要はありませんね。
DelSubMenu の代わりに
Private Sub Workbook_Open()
Dim myMenu As CommandBar
Dim cmdSubMenu As CommandBarControl
'すでにサブメニューがあれば削除する
''DelSubMenu '←ここは不要
Set myMenu = Application.CommandBars("Worksheet Menu Bar")
On Error Resume Next
myMenu.Controls("メニュー").Delete
On Error GoTo 0
Set mySubMenu = myMenu.Controls.Add(Type:=msoControlPopup, Temporary:=True)
mySubMenu.Caption = "メニュー"
ユーザーメニューを加える時は、Temporary:=True は、必ず入れてください。
VBAが失敗しても、再起動すれば、ユーザー・メニューは消えています。
すでにサブメニューがあれば削除するということで、サブルーチンで、
mySubMenu.Delete
を元のコードから供給するのでは、ほとんど意味がありません。しかし、これは、コーディング・マナーというのか、あくまでも、削除するのものは自分のマクロのみにします。Reset を使うものもありますが、数多くなると、Reset は使いません。
>マクロ解説HPで勉強しつつ作成致しました。
本当にVBAを勉強したいのでしたら、Webサイトでは、よろしくありません。体系的な知識を身につけにくく、知識が断片的になりやすいのと、いろんな寄せ集めて、統合化しにくいのです。コーディング・スタイルというものも、人それぞれ、ないようでいてありますから、そういうものを混ぜてしまうと、読みにくくなります。
No.1
- 回答日時:
展開してしまうのは、以下の部分のOnActionで「xls」ファイルにある「cmd1」をマクロ登録されてしまっている為、だと考えられます。
cmdSubMenu.OnAction = "cmd1"
つまり、「xls」が閉じられた状態で、開いているファイルのどこにも同じプロシージャ名が存在しない状態で、メニューが作成されれば、「xla」ファイルに対してマクロ登録されるはずです。
なので、開いている全てのファイルの中に、同じプロシージャ名が存在しない状態(無論、個人用マクロブックにも存在しない状態)にして、「MakeSubMenu」を実行すればいいです。
まぁ、以下の様にファイル名も指定して登録してもいいかもしれません。
cmdSubMenu.OnAction = ThisWorkbook.Name & "!cmd1"
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) 【VBA】先月分の取得ができない理由が分かりません。 2 2022/04/24 11:16
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
蒙古タンメンとプルダックポッ...
-
Excel2016でプルダウンのメ...
-
9月一臂の〔一臂〕の意味
-
7月20日は「ハンバーガー」の日...
-
ケンタッキーバーレルの「バー...
-
モスバーガーのハンバーガーは...
-
飲食店で、一人で食事をしてい...
-
700Wの電子レンジは、コンビニ...
-
ACCESS ファイルへのアクセス...
-
MACとwindwsの違い
-
ケンタッキーフライドチキンっ...
-
シェーキーズの食べ放題
-
卒業論文が書けなくて困ってい...
-
渋谷、原宿でオススメのお店! ...
-
神戸にんにく屋について
-
エクセルVBA アドイン メニュ...
-
吉野家の並盛、大盛、特盛の関係
-
フォームにメニューを追加する...
-
WORDのメニューバーがおかしい?
-
日本国内のハンバーガーチェー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel2016でプルダウンのメ...
-
飲食店で、一人で食事をしてい...
-
漢字の読み方 「火」と「会」を...
-
EXCELのプルダウンメニューを全...
-
マクドナルド、ミスタードーナ...
-
蒙古タンメンとプルダックポッ...
-
windowsのワードで作った文章を...
-
マクドナルドのバイトをしてい...
-
モスバーガーのハンバーガーは...
-
MACで、窓の杜のようなサイト
-
すき家のアルバイトは
-
9月一臂の〔一臂〕の意味
-
1円玉がたくさんくっついてとれ...
-
ケンタッキーフライドチキンっ...
-
「一見」を「いっけん」と読む...
-
ACCESS ファイルへのアクセス...
-
マックで働いてるものなのです...
-
【株主優待券】松屋フーズの松...
-
ウィンドウズからマックへのメ...
-
牛丼は(うしどん)とは読まず...
おすすめ情報