Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5763 / 13645 ツリー ←次へ | 前へ→

【48952】選択マクロボタンの再選択 Sub 07/5/17(木) 13:44 質問[未読]
【48954】Re:選択マクロボタンの再選択 ぱっせんじゃー 07/5/17(木) 13:47 発言[未読]
【48962】Re:選択マクロボタンの再選択 Kein 07/5/17(木) 17:42 回答[未読]
【48964】Re:選択マクロボタンの再選択 Sub 07/5/18(金) 10:11 質問[未読]
【48965】Re:選択マクロボタンの再選択 Kein 07/5/18(金) 10:25 発言[未読]
【48966】Re:選択マクロボタンの再選択 Kein 07/5/18(金) 10:29 発言[未読]
【48968】Re:選択マクロボタンの再選択 Sub 07/5/18(金) 11:11 質問[未読]
【48977】Re:選択マクロボタンの再選択 Kein 07/5/18(金) 18:27 発言[未読]
【49024】Re:選択マクロボタンの再選択 Sub 07/5/21(月) 10:40 お礼[未読]

【48952】選択マクロボタンの再選択
質問  Sub  - 07/5/17(木) 13:44 -

引用なし
パスワード
   まったくの初心者で申し訳ございませんが
お願いします

Excelのシート上にマクロボタンを複数個貼り付けてあり,
最後にマクロボタンを押したものを,もう一度同じボタンを
押すために,新たに作成する共通ボタンで対処しマクロを登録したい
とおもってます。

Application.Run "マクロ名"
最後に選択したマクロ名を取得するすることになろうかと思いますが
どうすればよいでしょうか。

よろしくお願いいたします。

【48954】Re:選択マクロボタンの再選択
発言  ぱっせんじゃー  - 07/5/17(木) 13:47 -

引用なし
パスワード
   ボタンは何ですか?

シェイプで作ったボタン

表示→ツールバー→フォーム
で作ったボタン

コントロールツールボックスのボタンなど。

【48962】Re:選択マクロボタンの再選択
回答  Kein  - 07/5/17(木) 17:42 -

引用なし
パスワード
   少なくとも現在シート上に複数個配置しているボタンを、
フォームツールバーのものにして下さい。そしてそれらのボタンに
登録しているマクロの冒頭、全てに

Dim x As Variant

と変数の宣言を追加し

x = Application.Caller
If VarType(x) <> 8 Then Exit Sub
If MyBt <> x Then MyBt = x

というコードを追加します。そして標準モジュールの先頭に

Public MyBt As String

と、グローバル変数を宣言し、共通ボタンのマクロは

Select Case MyBt
  Case "": Exit Sub
  Case "ボタン 75": Call Macro1
  Case "ボタン 77": Call Macro2
  Case "ボタン 78": Call Macro3
End Select

というように、ボタン名によって呼び出すマクロを分岐すれば良い
と思います。
なお、フォームツールバーのコントロールにつく個別の名前は、
そのコントロールをデザインモードで選択した状態(マクロを登録済み
なら、Ctrlキーを押しながら選択)で、数式バーを出してみれば分かります。

【48964】Re:選択マクロボタンの再選択
質問  Sub  - 07/5/18(金) 10:11 -

引用なし
パスワード
   ぱっせんじゃーさん
kein さん
ありがとうございました
ボタンは
表示→ツールバー→フォーム
で作ったボタンを使用しています。

各マクロには,下記のRange("x:y")の箇所を変数とし複数個
あります。
1回目の動作ではRange("x:y")行の呼出
もう一回押すとRange("x:y")の箇所で空白行だったら表示させない
ようになっております。(ここで教えていただきました)

標準モジュール¥Module5\ に書き込んであります。

  Dim MyR As Range
  Dim x As Variant ・・・・追加

  On Error GoTo ELine
  Set MyR = Range("x:y").SpecialCells(3, 2).EntireRow 
  On Error GoTo 0
  MyR.Hidden = IIf(MyR.Hidden, False, True)
  Set MyR = Nothing
ELine:
x = Application.Caller         ・・・追加
If VarType(x) <> 8 Then Exit Sub    ・・・追加
If MyBt <> x Then MyBt = x       ・・・追加


ここで
そして標準モジュールの先頭に
Public MyBt As String  とはどこに入れればよいのでしょうか?(汗
共通マクロボタンの作成は理解できます。
すみませんがよろしく願いいたします。

【48965】Re:選択マクロボタンの再選択
発言  Kein  - 07/5/18(金) 10:25 -

引用なし
パスワード
   コードの順序が違います。"冒頭に"と書いたはずです。だから・・

  Dim MyR As Range
  Dim x As Variant ・・・・追加

  x = Application.Caller         ・・・追加
  If VarType(x) <> 8 Then Exit Sub    ・・・追加
  If MyBt <> x Then MyBt = x       ・・・追加
  On Error GoTo ELine
  Set MyR = Range("x:y").SpecialCells(3, 2).EntireRow 
  On Error GoTo 0
  MyR.Hidden = IIf(MyR.Hidden, False, True)
  Set MyR = Nothing
ELine:

と、修正して下さい。
>Public MyBt As String  とはどこに入れれば
ツールバーのボタンを使っているなら、そこへ登録しているマクロは
全て標準モジュールに書いているはずです。そのモジュールの一番上
(即ち(General) と太字で表示されている組み込みのコンボボックスに
最も近い場所、という意味です。)に書き込むのです。APIの使用宣言文
とか、グローバル変数を書く位置は、そのように決められています。

【48966】Re:選択マクロボタンの再選択
発言  Kein  - 07/5/18(金) 10:29 -

引用なし
パスワード
   なお、ボタンに登録しているマクロを、全部おなじモジュール内に記述しているなら
Public を Private に変更した方がベターです。そうすると他のモジュール
からはスコープされなくなるので、若干ですが安全性が増します。

【48968】Re:選択マクロボタンの再選択
質問  Sub  - 07/5/18(金) 11:11 -

引用なし
パスワード
   ▼Kein さん: たびたびありがとうございます。
共通ボタンの作成は理解出来ていると記載しましたが
実際やってみると,うまく動きません。
  Case "ボタン 75": Call Macro1
      ↑      ↑
      │     マクロ名ですか?  
ボタンに表示されている名前ですか?

私のボタン名は”今日”
マクロ名は”'仕事.xls'!今日"
を当てはめても動きません。
また,
Public MyBt As StringはModule5の一番上に書き入れました。
下に____________が入りました。

度々お手数をおかけいたしますが,何卒よろしくお願いいたします。

【48977】Re:選択マクロボタンの再選択
発言  Kein  - 07/5/18(金) 18:27 -

引用なし
パスワード
   ▼Sub さん:
>▼Kein さん: たびたびありがとうございます。
>共通ボタンの作成は理解出来ていると記載しましたが
>実際やってみると,うまく動きません。
>  Case "ボタン 75": Call Macro1
>      ↑      ↑
>      │     マクロ名ですか?  
>ボタンに表示されている名前ですか?
>
>私のボタン名は”今日”
>マクロ名は”'仕事.xls'!今日"
>を当てはめても動きません。
>また,
>Public MyBt As StringはModule5の一番上に書き入れました。
>下に____________が入りました。
>
>度々お手数をおかけいたしますが,何卒よろしくお願いいたします。

>ボタンに表示されている名前ですか?
ボタンを配置(挿入)した直後なら、ボタンの表面の文字が
そのままボタン名になりますが、もし任意の文字に変更していたら、
まず数式バーを出し、Ctrlキーを押しながらボタンを選択し、
数式バーの左端に出てくる文字を確認して下さい。それが実際のボタン名
になります。スペースなども正確にメモしておいて、コードに書き込んで
下さい。
>マクロ名ですか?
そうです。"今日"というタイトルのマクロを呼び出すなら

Call 今日

と、すればいいのです。
>Module5の一番上に書き入れました。
それは、それで良いでしょう。自信を持ってやってみて下さい。
何かのエラーが出たら、そのコードとエラーメッセージを報告してくれれば
いいのです。

【49024】Re:選択マクロボタンの再選択
お礼  Sub  - 07/5/21(月) 10:40 -

引用なし
パスワード
   ▼Kein さん
お蔭様で,完成できました。
数式バーってfxの場所だと勘違いしてまして・・
ボタン名が確認できました。
本当に,長い間
ご丁寧に,的確な回答をありがとうございました。
これで〆ます。

5763 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free