Excel VBA質問箱 IV

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

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


4857 / 13644 ツリー ←次へ | 前へ→

【53959】全てのブックからCALL出来るプロシージャ ko-papa 08/2/18(月) 15:38 質問[未読]
【53961】Re:全てのブックからCALL出来るプロシージャ ichinose 08/2/18(月) 17:32 発言[未読]
【53965】Re:全てのブックからCALL出来るプロシージャ ko-papa 08/2/18(月) 19:43 お礼[未読]
【54023】Re:全てのブックからCALL出来るプロシージャ ko-papa 08/2/20(水) 12:12 お礼[未読]

【53959】全てのブックからCALL出来るプロシージャ
質問  ko-papa  - 08/2/18(月) 15:38 -

引用なし
パスワード
   ある特定のプロシージャを、全てのブックのモジュールからCall出来るようにしたいと思い下記のようにしました。予想通り動いたのですが、使用中に、ファイルが破損され、ファイルの修復手続きに入ってしまいました。どうやらやってはいけないことをしてしまったようです。当初の目的を達成するための正しい方法をご教示願います。

1.プロシージャを、VBAProject (Personal.xls)のモジュールに書き込む。
2.「VBAProject(Personal.xls)」の「VBA Project」を、VBA Projectのプロパティで「共有プロシージャ」と書き換え。
3.他のブックに対応するVBAProjectで、「ツール‐参照設定」で「共有プロシージャ」にチェックのうえ、そのブック内のモジュールで、「共有プロシージャ(Personal.xls)内のモジュールに書かれた上記1のプロシージャをCALL。

なお、上記のようにしたのは以下の理由からです。
A.マクロを記録する際に、マクロの保存先を「個人用マクロブック」に指定すると、そのプロシージャがVBAProject(Personal.xls)のモジュールに書き込まれ、エクセルを開けばいつも使えるようになっている。
B.他のブックのプロシージャをコールするためには、上記2〜4のような手続きをすればよいと、市販の手引書に書いてあった。
今回は上記を組み合わせて、Bの手続きを、VBAProject(Personal.xls)に適用してみた次第です。なお、2の手続きの中で、なぜVBAProjectを別名に書き換える必要があるのかは不明です。書き換えないと、「ツール‐参照設定」で表示されるリスト中に、VBAProject の表示が複数出てきてしまい、どこにチェックをつけたらよいのか判らないという問題があったため、書き換えるのかな〜、とは思っています。

【53961】Re:全てのブックからCALL出来るプロシー...
発言  ichinose  - 08/2/18(月) 17:32 -

引用なし
パスワード
   ▼ko-papa さん:
こんにちは。
そんなに間違っている記述には見えませんけどねえ・・・。

WindowsのバージョンとExcelのバージョンを記述してください。

私は、Win2000&EXCEL2002ですが、同じような共有モジュール
(実際には、共有プロジェクト でしょうか)という方法を
いくつも使っていますよ!!

私は、この共有プロシジャーをXLAファイルつまり、アドインとして
登録しています。


・新規ブックの ThisWorkbookのモジュールに例としてのプロシジャー

'==========================================================
Option Explicit
Sub 足し算(ByVal x As Variant, ByVal y As Variant, z As Variant)
  z = x + y
End Sub

簡単な足し算するコードです。


・このブックのプロジェクト名をVBA Projectのプロパティにて
「共有プロシージャ」と書き換えます。

・当該ブックをアドインとして、保存します。
 保存ファイル名も共有プロシージャ.XLAとしましょう。

・Excelに戻って、「ツール」---「アドイン」とクリックし、
 アドインダイアログを表示させます。

・有効なアドインの一覧に「共有プロシージャ」があれば、チェックを入れてください。

・なければ、参照ボタンをクリックして、「共有プロシージャ.XLA」を保存した
 フォルダを見つけて選択してください。

・これでアドイン「共有プロシージャ」の設定がなされます。

・一度、Excelを終了し、再度Excelを起動してみてください。

・新規ブックの作成してください(もっともExcel起動すれば、新規ブックが
 作成されているはずですが)

・VBEにて、この新規ブック(BOOK1)のプロジェクトをアクティブにした状態で
 「ツール」---「参照設定」にて、共有プロシジャーにチェックを入れてください。

・BOOK1の標準モジュールに

'============================================================
Sub main()
  Dim a As Long, b As Long, c As Long
  a = 55: b = 45
  共有プロシジャー.ThisWorkbook.足し算 a, b, c
  MsgBox a & "+" & b & " = " & c
End Sub

上記のmainを実行すれば、100という答えが表示されます

もっとも私の環境では、参照設定をしなくても

'===============================================================
Sub main2()
  Dim a As Long, b As Long, c As Long
  a = 55: b = 45
  Workbooks("共有プロシジャー.xla").足し算 a, b, c
  MsgBox a & "+" & b & " = " & c
End Sub

というコードでも正しい結果(55+45=100)を表示します。

Personalにコードを入れるより、アドインにしたほうが後々の扱いは
楽だと思いますよ!!
(内容によっては、プロジェクトを分けられるしね)

私の場合、実際の運用は、上記とはちょっと違い、
クラスモジュールにコードを記述して
必要に応じて、呼び出し側でインスタンスを作成すると言うような運用を
していますが、まあこれがうまくいくようなら検討してみてください。

【53965】Re:全てのブックからCALL出来るプロシー...
お礼  ko-papa  - 08/2/18(月) 19:43 -

引用なし
パスワード
   ichinose さん、

Personal.xlsを使う必要はないんですね。
ご指摘のアドインの方法でやって見ます。業務の合間を見ながら作業をしているので、すぐに対応できないのですが、できたらすぐご報告させていただきます。

因みにバージョンは、XP と Excel2003です。

【54023】Re:全てのブックからCALL出来るプロシー...
お礼  ko-papa  - 08/2/20(水) 12:12 -

引用なし
パスワード
   共有プロシージャ.xlaの方法で、解決いたしました。
どうもありがとうございました。

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