Excel VBA質問箱 IV

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

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


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

【35673】シート上に設置したボタンのマクロについて 空牙 06/3/9(木) 21:48 質問[未読]
【35682】Re:シート上に設置したボタンのマクロにつ... ichinose 06/3/10(金) 8:29 発言[未読]
【35708】Re:シート上に設置したボタンのマクロにつ... 空牙 06/3/10(金) 18:00 質問[未読]
【35725】Re:シート上に設置したボタンのマクロにつ... ichinose 06/3/11(土) 8:22 発言[未読]
【35842】Re:シート上に設置したボタンのマクロにつ... 空牙 06/3/14(火) 16:29 お礼[未読]
【35860】Re:シート上に設置したボタンのマクロにつ... ichinose 06/3/14(火) 18:32 発言[未読]

【35673】シート上に設置したボタンのマクロについ...
質問  空牙  - 06/3/9(木) 21:48 -

引用なし
パスワード
   いつもお世話になります。
Excelのプログラムにてひとつどうしても解決できない現象があり、
質問をあげさせて頂きたいと思います。

【環境】
エクセルブック(サンプル.xlsとします)の
シート("シート1"という名前とします)上にボタンを設置しており
そのボタンが参照するマクロ(mcr出力というマクロとします)が
"シート1のシートモジュール"内にあるとします。

この時、ボタンのマクロ名は"サンプル.xls!mcr出力"になっていて
ボタンを押せばmcr出力が走る状況です。

【動作】
↓プログラム内で処理しています。
シート1を新規ブック(コピー.xlsとします)にコピーしてセーブします。

【現象】
新規に作成されたブックのシート1のボタンのマクロ名が
"コピー.xls!mcr出力"となってほしいのに
"サンプル.xls!mcr出力"となったままで
ボタンを押すとサンプル.xlsを起動してサンプル.xlsのmcr出力を実行します。

ボタンのonActionプロパティに"コピー.xls!mcr出力"とセットして
セーブをしても"サンプル.xls!mcr出力"に戻ってしまいます。

この現象を回避する方法をご存知の方がいらっしゃいましたら
ご教授お願い致します。

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

【35682】Re:シート上に設置したボタンのマクロに...
発言  ichinose  - 06/3/10(金) 8:29 -

引用なし
パスワード
   ▼空牙 さん:
おはようございます。

>いつもお世話になります。
>Excelのプログラムにてひとつどうしても解決できない現象があり、
>質問をあげさせて頂きたいと思います。
>
>【環境】
>エクセルブック(サンプル.xlsとします)の
>シート("シート1"という名前とします)上にボタンを設置しており
>そのボタンが参照するマクロ(mcr出力というマクロとします)が
>"シート1のシートモジュール"内にあるとします。
このボタンはコマンドバー「フォーム」にあるボタンですね?


>
>この時、ボタンのマクロ名は"サンプル.xls!mcr出力"になっていて
>ボタンを押せばmcr出力が走る状況です。

シートモジュールにあるのに"サンプル.xls!mcr出力"となっているのですか???


>
>【動作】
>↓プログラム内で処理しています。
>シート1を新規ブック(コピー.xlsとします)にコピーしてセーブします。
>
>【現象】
>新規に作成されたブックのシート1のボタンのマクロ名が
>"コピー.xls!mcr出力"となってほしいのに
>"サンプル.xls!mcr出力"となったままで
>ボタンを押すとサンプル.xlsを起動してサンプル.xlsのmcr出力を実行します。
>
>ボタンのonActionプロパティに"コピー.xls!mcr出力"とセットして
>セーブをしても"サンプル.xls!mcr出力"に戻ってしまいます。
>
>この現象を回避する方法をご存知の方がいらっしゃいましたら
>ご教授お願い致します。
簡単な方法は、このコマンドボタンをコマンドバー「フォーム」のボタンから
「コントロールツールボックス」のボタンに代えると名前のことを
気にしなくてすみますよ!!




新規ブックのSheet1に「コントロールツールボックス」のコマンドボタン(Commandbutton1)を配置します。


Sheet1のモジュールに

'========================================================
Private Sub CommandButton1_Click()
  Me.Copy
  
End Sub

「コントロールツールボックス」の
デザインモードを終了させます(三角定規のアイコンをクリック)。


これでボタンクリックで新規作成されたシートにあるプロシジャーが実行されます。


試してみてください。

【35708】Re:シート上に設置したボタンのマクロに...
質問  空牙  - 06/3/10(金) 18:00 -

引用なし
パスワード
   ▼ichinose さん:はじめまして。
Resありがとうございます。
>
>このボタンはコマンドバー「フォーム」にあるボタンですね?

はぃ。「フォーム」のコマンドボタンです。
(開発元のサンプルプログラムが既存でフォームのボタンを使用しているのです。)
>シートモジュールにあるのに"サンプル.xls!mcr出力"となっているのですか???

はぃ。ブック名!マクロ名になります。

>簡単な方法は、このコマンドボタンをコマンドバー「フォーム」のボタンから
>「コントロールツールボックス」のボタンに代えると名前のことを
>気にしなくてすみますよ!!
>
>例
>
>新規ブックのSheet1に「コントロールツールボックス」のコマンドボタン(Commandbutton1)を配置します。
>試してみてください。

「コントロールツールボックス」のコントロールを使用することで
何か制限等は発生しないでしょうか?
例えば、エクセルでツールを配布するとして
余分なアプリケーションが全くインストールされていない
マシン(Officeのみインストールされている)では動作しないなど。

「ファイル選択ダイアログ」をOpenさせるコマンドは
VB系ソフトがインストールされていないと使えないものと、
なくても使えるものと、2種類あるとか。

問題なければ、「コントロールツールボックス」のボタンに変更するのですが・・。
すみません。質問責めばかりで。。

【35725】Re:シート上に設置したボタンのマクロに...
発言  ichinose  - 06/3/11(土) 8:22 -

引用なし
パスワード
   ▼空牙 さん:
おはようございます。

>(開発元のサンプルプログラムが既存でフォームのボタンを使用しているのです。)
>>シートモジュールにあるのに"サンプル.xls!mcr出力"となっているのですか???
>
>はぃ。ブック名!マクロ名になります。

コッマンドバー「フォーム」のボタンに「ブック名!マクロ名」とマクロが登録されていて、マクロ名に相当するプロシジャーがシートモジュールにある・・・。

ということは考えられないのですが。
この場合、「mcr出力」というプロシジャーは標準モジュールに記述されていないと
動作しないはずなのです。
シートモジュールに「mcr出力」が記述されていれば、
「Sheet1.mcr出力」等とマクロは登録されていなければ作動しないはずなんです。

ボタンを「コントロールツールボックス」のボタンに変えるのならば、
コードは、シートモジュールに記述しなければ作動しません。
ここを確認しておいてください。


>「コントロールツールボックス」のコントロールを使用することで
>何か制限等は発生しないでしょうか?
>例えば、エクセルでツールを配布するとして
>余分なアプリケーションが全くインストールされていない
>マシン(Officeのみインストールされている)では動作しないなど。

Windowsなら、大丈夫だと思いますが
全てを確認したわけではありませんので
確かなことはいえません。
私が知っている限りでは、ボタンを動的に作成するコードがあると
問題が発生することは確認しています。
(動的というのは、コードでボタンを作成したり、削除したりすること
これに対して静的というのは、予めボタンを作成しておいて運用すること
をいいます)。

どうしても心配なら、

フォームのボタンに登録されているマクロを変更するしかないですが・・。

検討してください

【35842】Re:シート上に設置したボタンのマクロに...
お礼  空牙  - 06/3/14(火) 16:29 -

引用なし
パスワード
   ▼ichinose さん:
Resありがとうございます。

>コッマンドバー「フォーム」のボタンに「ブック名!マクロ名」とマクロが登録されていて、マクロ名に相当するプロシジャーがシートモジュールにある・・・。
>ということは考えられないのですが。
>この場合、「mcr出力」というプロシジャーは標準モジュールに記述されていないと
>動作しないはずなのです。
>シートモジュールに「mcr出力」が記述されていれば、
>「Sheet1.mcr出力」等とマクロは登録されていなければ作動しないはずなんです。
>ボタンを「コントロールツールボックス」のボタンに変えるのならば、
>コードは、シートモジュールに記述しなければ作動しません。
>ここを確認しておいてください。
>

申し訳ありません、脱字しておりました。
正確には「ブック名!シート名.マクロ名」でした。
しかしどうしても"ブック名!"が消えません。
シートをコピーしたらコピー元のブックのシートのマクロを見に行こうとします。


>Windowsなら、大丈夫だと思いますが
>全てを確認したわけではありませんので
>確かなことはいえません。
>私が知っている限りでは、ボタンを動的に作成するコードがあると
>問題が発生することは確認しています。
>(動的というのは、コードでボタンを作成したり、削除したりすること
>これに対して静的というのは、予めボタンを作成しておいて運用すること
>をいいます)。
>どうしても心配なら、
>フォームのボタンに登録されているマクロを変更するしかないですが・・。
>検討してください

実は私も上記で配布したエクセルが動かないという現象は体験しております(汗
一からつくり直しても結局同じ現象に。。調査する方法がなくなったわけでは
ありませんし、また根気よく原因究明していきたいと思います。
それでだめなら、コントロールのボタンを使用しようとも。

ichinose さん
アドバイスありがとうございました。

【35860】Re:シート上に設置したボタンのマクロに...
発言  ichinose  - 06/3/14(火) 18:32 -

引用なし
パスワード
   ▼空牙 さん:
こんばんは。
コマンドバー「フォーム」のボタンのコピーの例です。


新規ブックの」Sheet1にコマンドバー「フォーム」のボタンを配置してください。

このSheet1のシートモジュールに

'==========================================================
Sub ボタン1_Click()
  Me.Copy
  With ActiveWorkbook
   .ActiveSheet.Buttons("button 1").OnAction = _
'              ↓名前はこのようにして確認してください
'   msgbox activesheet.buttons(1).name
      .Name & "!" & .ActiveSheet.CodeName & ".ボタン1_Click"
   End With
  MsgBox "copy ok"
End Sub


とし、
ボタンに上記のマクロを登録してください。


これで確認してみてください。

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