• ベストアンサー

特定のエクセルでのみ独自のメニューを出すには

EXCEL97が対象です。 エクセル97を開くとファイル、編集、表示、挿入とメニューが出ます。 ここにブックシート独自のメニューを出す事は可能ですか? A001.xls を 開く ファイル、編集、表示、挿入,メニューA01,メニューA02 B001.xls を 開く ファイル、編集、表示、挿入,メニューB01,メニューB02

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

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

こんばんは。Wend02です。 通常、ユーザー設定のコマンドバーは、Temporary 属性にします。理由は、ハングした後などに、そのメニューの残骸を残さないためです。また、ワークブックによってメニューを換えたりする場合は、#3 のご指摘にように、Active イベントとDeActive イベントを加えますが、Temporary 属性のために、本来、Applicationを終了すれば、そのメニューは消えてしまいます。つまり、特定のブックのみに、メニューが現れるという仕組みです。 なお、本来は、Addメニューのコードは、Workbook_Open イベントなどには、直接書かないで、標準モジュールなどに書いておき、Call を使います。そのほうが見やすく負担が少ないわけです。ブックによって切り替えるときなどは、ThisWorkbook.Name を取って、分岐させて、Call します。 Private Sub Workbook_Open()   Dim MyMenu As CommandBar     Set MyMenu = Application.CommandBars("Worksheet Menu Bar")   On Error Resume Next   MyMenu.Controls("メニュー01(&A)").Delete   MyMenu.Controls("メニュー02(&B)").Delete   On Error GoTo 0     '親メニュー   With MyMenu.Controls.Add(Type:=msoControlPopup, Before:=5, Temporary:=True)    .Caption = "メニュー01(&A)"    .Tag = "A01"   End With   'サブメニュー   With MyMenu.FindControl(Tag:="A01").Controls.Add(Type:=msoControlButton, Temporary:=True)    .Caption = "A01Sub1"    .OnAction = "A01マクロ1"    .BeginGroup = False   End With   With MyMenu.FindControl(Tag:="A01").Controls.Add(Type:=msoControlButton, Temporary:=True)    .Caption = "A01Sub2"    .OnAction = "Aマクロ2"     End With   '親メニュー   With MyMenu.Controls.Add(Type:=msoControlPopup, Before:=6, Temporary:=True)    .Caption = "メニュー02(&B)"    .Tag = "B01"   End With   'サブメニュー   With MyMenu.FindControl(Tag:="B01").Controls.Add(Type:=msoControlButton, Temporary:=True)    .Caption = "B01Sub1"    .OnAction = "Bマクロ1"     End With   With MyMenu.FindControl(Tag:="B01").Controls.Add(Type:=msoControlButton, Temporary:=True)    .Caption = "B01Sub2"    .OnAction = "Bマクロ2"   End With   Set MyMenu = Nothing End Sub メニューの種類については、ヘルプやマニュアルで確かめてください。サブメニューの下にまた加えることは可能です。

PYTHON357
質問者

お礼

ありがとうございます。バッチリです。

その他の回答 (5)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.6

#3 のbonaronです。 >>(1) 新しいツールバーを作成します。 >>  仮に名前を「A001ツールバー」とします。 >   私と同じ手順で 新しいツールバーですか? そうです。 [ユーザー設定] - [ツールバー] - [新規作成] [ツールバー名] を「A001ツールバー」     >>(2) (1)に、メニューA01,メニューA02 を作成します。 >  (出来たものをコピーで可) >   サブメニューの作り方も教えてくれませんか? [コマンド] タブに変えて [分類]:「新しいメニュー」の[コマンド]:「新しいメニュー」を(1)のツールバーにドラッグ。 プロパティで名前等を設定。(メニューA01など) ------ ※ あとは、この下に 「ユーザ設定メニュー項目」や「新しいメニュー」を 必要なだけドラッグ。 加えたのが「新しいメニュー」の場合には ※ に戻って繰り返し。 (これにコントロールを追加するときは右(三角の向いている方)に追加です。) >>(3) ユーザー設定で「添付」 >   添付の後の処理は? 今作ったツールバー「A001ツールバー」を選択し、「コピーボタン」をクリック」、「OK」をクリック。 あとは、普通に閉じてしまっていいです。 我ながら、説明がヘタだなぁ・・・。

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.4

#3の訂正です。 With Application .CommandBars(MY_BAR).Controls(2).Copy bar:=.CommandBars(MENU_BAR), Before:=4 'End With <---- この行削除 .CommandBars(MY_BAR).Controls(1).Copy bar:=.CommandBars(MENU_BAR), Before:=4 End With 失礼しました。 m(__)m

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.3

大雑把に、やり方は2通り。 1つは #1のWendy02さんのやり方で Type:=msoControlPopup にして さらにその下層にボタンを追加していく方法。 こちらがよければサンプルをアップします。 2つ目は、現在のやり方をちょっと工夫する。  こちらの方が簡単かと思いますが。  A001.xlsの場合で。 (1) 新しいツールバーを作成します。   仮に名前を「A001ツールバー」とします。 (2) (1)に、メニューA01,メニューA02 を作成します。   (出来たものをコピーで可) (3) ユーザー設定で「添付」 (4) This Workbook に以下をコーディング Option Explicit Const MENU_BAR = "Worksheet Menu Bar" Const MY_BAR = "A001ツールバー" Private Sub Workbook_Activate() With Application .CommandBars(MY_BAR).Controls(2).Copy bar:=.CommandBars(MENU_BAR), Before:=4 End With .CommandBars(MY_BAR).Controls(1).Copy bar:=.CommandBars(MENU_BAR), Before:=4 End With End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.CommandBars(MY_BAR).Delete End Sub Private Sub Workbook_Deactivate() Application.CommandBars(MENU_BAR).Reset End Sub

PYTHON357
質問者

補足

下記の手順をもう少し詳しく説明してくれませんか? >(1) 新しいツールバーを作成します。 >  仮に名前を「A001ツールバー」とします。    私と同じ手順で 新しいツールバーですか?     >(2) (1)に、メニューA01,メニューA02 を作成します。 >  (出来たものをコピーで可)    サブメニューの作り方も教えてくれませんか? >(3) ユーザー設定で「添付」     添付の後の処理は?

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

こんにちは。#1のWendy02です。 >どのエクセルファイルを開いても同じメニューが出てしまいます。 >(1),(2),(3)……以上の操作で独自メニューは作れますが ? もしかしたら、ほとんど、マクロはご存知ないのでしょうか?もし、そうでしたら、おっしゃっているようなことは、不可能だと思います。メニューの取り付け方がまったく違います。

PYTHON357
質問者

補足

私の独自メニューの作り方では欠点があるので 他の方法を模索してました。 Wendy02さんの Private Sub Workbook_Open()  で、目標はほぼ達成出来そうです。 後メニューA01の下に サブメニュをぶら下げられれば完璧です。 サブメニュの作成方法をご存知ですか? マクロはある程度、使えますよ。

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

こんにちは。 ある程度、ご自身が、マクロでどの程度まで組み込んでいるのか提示してもらわないと、話の進めようがありません。これは、マクロでしか解決の方法がありません。もう少し、質問の仕方を考えてください。 今、97 では試していませんが、たぶん、並びが同じならできるはずです。以下は、サンプルですから、応用できましたら、お使いください。それぞれの ThisWorkbook_Open イベントに入れてください。 Private Sub Workbook_Open()   With Application.CommandBars("Worksheet Menu Bar")    On Error Resume Next    .Controls("メニュー001(&A)").Delete    .Controls("メニュー002(&B)").Delete    On Error GoTo 0    With .Controls.Add(Type:=msoControlButton, Before:=5, Temporary:=True)      .Caption = "メニュー001(&A)"      .OnAction = "マクロA"      .TooltipText = "メニュー001"      .Style = msoButtonCaption      .Tag = "A001" '通常はいらない      .Visible = True    End With    With .Controls.Add(Type:=msoControlButton, Before:=6, Temporary:=True)      .Caption = "メニュー002(&B)"      .OnAction = "マクロB"      .TooltipText = "メニュー002"      .Style = msoButtonCaption      .Tag = "B001" '通常はいらない      .Visible = True    End With   End With End Sub なお、ユーザー設定のTag は、FindControlメソッドのために使用するものです。

PYTHON357
質問者

補足

(1) ツール - ユーザ設定 - コマンド (2)新しいメニュー を  メニュー部分(ファイル,編集,表示)に ドラッグ (3)マクロ- ユーザ設定メニュー項目 - を  メニュー部分(ファイル,編集,表示)に ドラッグ 以上の操作で独自メニューは作れますが どのエクセルファイルを開いても 同じメニューが出てしまいます。

関連するQ&A

  • excel でメニュー画面を作りたい

    EXCELで以下のようなメニューをマクロで作りたいと考えています。 どなたか教えていただけませんか。 以下の内容です。 (1) menu.xlsに4個のボタンを設定し、各ボタンから該当のsheetを起動する。 例 A.xls  → sheet1      → sheet2 B.xls  → sheet1      → sheet2 (2) 各sheetに「menuへ」のボタンを設定しmenuへ戻る。   (この際sheetを保存し閉じてからメニューへ戻る) 以上 宜しくお願いいたします。

  • 複数のエクセルブックから特定シートの特定セル抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル値を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 よく似ている質問、回答を読んだのですが、私のレベルではとても応用できず質問させていただきます。 【前提】 ・実行する端末のOSはWindows XP(SP3)、Excelは2003 ・対象フォルダはネットワーク接続フォルダ「\データ解析\データ」  この中に、複数のExcelブックがあります。 ・抽出したい対象は、各ブック内のシート(シート名はファイル名と同じ)の「BO6からBW16までの□の範囲」で統一されています。 【抽出一覧作成イメージ】 ・「集計.xls」ブックの「Sheet1」の2行目から抽出した結果を一覧表示する。 ・表示はA列に抽出元ブック名(=ファイル名)、B列に抽出元BO6セルの値。以降,C列・D列と 順に値を入れていきたい。 ・BO6~BW16までのセル値を「集計.xls」ブックの「Sheet1」に貼り付ける際には「値で貼り付ける」が望ましい。 というようなイメージです。 とても勝手なお願いではありますが、宜しくお願いいたします。

  • エクセル 別ファイルから シートを リンクを張らずに コピーしたい

    エクセル2003 1~4  はファイルの状態の説明です。 やりかたを質問したい部分は 5です。  1、ファイル(ブック)A.xls → 計算式が大量に入った数シートからなるファイル があるとする。 2、A.xls を そのままコピーし コピーされたファイルは B.xls に リネーム。 3、A.xls は 計算式等は変更しないが、データを変更し通常業務で使用。 4、A.xls の新バージョンを作るために B.xls を使って計算式等を編集。 (複数あるシートのうち一部シート(シート名 「あいうえ」 とする)のみの変更に加え さらに新シート「さしすせ」を作成) 5、A.xls のシート名 「あいうえ」をB.xlsで作った シート名 「あいうえ」と置き換え、 さらに新シート「さしすせ」もB.xlsからコピーして追加する。   普通にシート名 「あいうえ」や 新シート「さしすせ」を選択し  コピーを行うと B.xls からリンクを張った状態でコピーされて  しまう。たとえば シート「あいうえ」セルA1の中身を見ると  =[B.xls]あいうえ!A1*2+1 といったように [B.xls]が付いて  コピーされる。  これを回避して、単にそのまま丸ごと(A.xlsの中だけで編集したかのように) シートをコピーするにはどうしたら よいのでしょうか?  長くなってすいません。  よろしくおねがいいたします。  

  • エクセルのリンクについて

    こんにちは。 エクセルについての質問です。 通常、エクセルで他のエクセルからのデータを取得するとき ='[あああ.xls]sheet1'!$A$1 (「あああ.xls」のsheet1のA1セルのデータを取得) というような式を利用しますが、 この「AAA.xls」の部分を【指定したセルと同一名のものを取得】することは可能でしょうか? (すみません、意味がわかりませんよね。) 例えば… 「あああ.xls」というブックがあります。 そこに、セル「B1」に入力した名前と同じタイトルのブックの セル「A1」からデータを引っ張りたい。 「B1」が「いいい.xls」だったら「いいい.xls」のブックの「A1」から、 「B1」が「おおお.xls」だったら「おおお.xls」のブックの「A1」から データを持って来たいのです。 “=B1”というようなやり方ではさすがに無理なようで悩んでいます。 わかりにくい質問で申し訳ありません。 もしお分かりの方がいらっしゃいましたらお願い致します。

  • エクセル

    Book1 A1セルにBook2 A1,B1,C1(同一シート)いずれかに文字あるいは数値が入力された場合 Book1 A1にリンクするようにしたいのですが =[Book2.xls]Sheet1!A1&[Book2.xls]Sheet1!B1&[Book2.xls]Sheet1!C1 とすると今後D,E・・・・と続くとすごく長い式になってしまいます。 これをもっと簡単な式に出来ないものでしょうか。(エクセル2003使用) ヨロシクお願いします。

  • Excelについて:セルでデータを引っ張るファイル名を一律選択する方法

    教えてください。 Excelで他ファイルからデータを引用する場合、 =[file1.XLS]Sheet1!$B$1 の様に、 []内にファイル名(ここでは"flie1.xls")を入れればそのセルの内容が表示されると思うのですが、 そのファイル名をセルで指定することはできるでしょうか? 具体的にやりたい事は、 同一シート内のセルA1の値が"1234"であった時に、1234.xlsの中のSheet1!$B$1を探して表示する。 "1234"を"2345"に変更すれば、"2345".xlsの中のSheet1!$B$1を表示する。 ということが行いたいのです。 =[$A1$&".XLS"]Sheet1!$B$1 ではだめでした。 可能でしたら教えてください。 よろしくお願いします。

  • Excelメニューバーの表示

    Excelメニューバーのファイルのみが消えてしまいました。 編集 表示 挿入 書式 ツール データ ウィンドウ ヘルプの表示になっています。 ファイルを表示するには、どうしたら良いか教えてください。 宜しくお願いします。

  • ブックの保護(シート構成) でシートのコピー

    エクセルで外部データを参照させるために, 別のブックを開きシートをコピーし元のブックに貼り付け別のブックは閉じるというマクロを作成しました。 Workbooks.Open Filename:=a Sheets("データ").Select Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー") Workbooks(a).Close SaveChanges:=False a(変数)というファイルを開く シートのデータを選択 データをコピーし ファイル.xls のメニューシートの後に貼り付け a(変数)のエクセルファイルを保存せずに閉じる 動作としては正常に動きました。 しかし、この ファイル.xls には ID とパスワードで管理しています。 その管理したシートがあるんですが、それを表示させないために シートを非表示→ブックの保護→シート構成 を行いました。 マクロを動かすと、シート構成をしているので Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー")  が動かないことに気が付きました。 何かいい方法があればご教授お願いします。

  • エクセルのマクロで」・・・

    マクロの超初心者です。 1度研修で習った程度です。 a.xlsというブックでマクロを動かし、 既にいくつかシートがあるb.xlsを開いて最後のシートの次に新しいシートを作り、 既にあるc.xlsの1つ目のシートにあるデータをb.xlsの新しく作ったシート に貼り付け、b.xlsとc.xlsのブックは閉じるようにすることはできますか?(b.xls,c.xlsは最初閉じている) どのような感じにa.xlsでマクロを組めばよいのでしょうか? 今起動しているブックではないブックを起動したりできるのかも不明です。

  • エクセルのbookを開いたときに

    作成したエクセルのBookを開いたときに指定のシートを選択している状態にしたい。 エクセルで作成したBook「基本.xls」にa,b,cというシート3つがあります。 このブックを開いたときに必ずaというシートのセルa1が選択された状態にするにはどうしたら良いのでしょうか?

専門家に質問してみよう