Excel VBA質問箱 IV

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

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


5885 / 13646 ツリー ←次へ | 前へ→

【48321】アドインファイルの代替方法 ucahn 07/4/12(木) 19:22 質問[未読]
【48323】Re:アドインファイルの代替方法 kobasan 07/4/12(木) 21:16 発言[未読]
【48327】Re:アドインファイルの代替方法 uchan 07/4/12(木) 23:24 質問[未読]
【48328】Re:アドインファイルの代替方法 kobasan 07/4/12(木) 23:40 発言[未読]
【48356】Re:アドインファイルの代替方法 uchan 07/4/13(金) 22:15 発言[未読]
【48330】Re:アドインファイルの代替方法 ichinose 07/4/13(金) 7:39 発言[未読]
【48357】Re:アドインファイルの代替方法 uchan 07/4/13(金) 22:58 発言[未読]
【48365】Re:アドインファイルの代替方法 ucahn 07/4/14(土) 17:44 質問[未読]
【48384】Re:アドインファイルの代替方法 ichinose 07/4/15(日) 18:44 発言[未読]
【48389】Re:アドインファイルの代替方法 uchan 07/4/15(日) 23:30 発言[未読]
【48392】Re:アドインファイルの代替方法 ichinose 07/4/16(月) 7:24 発言[未読]
【48401】Re:アドインファイルの代替方法 ucahn 07/4/16(月) 13:03 発言[未読]

【48321】アドインファイルの代替方法
質問  ucahn  - 07/4/12(木) 19:22 -

引用なし
パスワード
   XLAファイルを使って複数のBookから共通処理を可能にしていますが、
XLAファイルは、BOOKと同一フォルダーにおいて置きたいですが、
その方法で、全く別のフォルダーにそっくり移して場合XLAの参照設定は
元の場所を示してしまいます。
この参照設定(XLA?)を使用しないで、クラス処理のようなことはできない
のでしょうか?
よろしくご教示ください。

【48323】Re:アドインファイルの代替方法
発言  kobasan  - 07/4/12(木) 21:16 -

引用なし
パスワード
   ▼ucahn さん:
>XLAファイルを使って複数のBookから共通処理を可能にしていますが、
>XLAファイルは、BOOKと同一フォルダーにおいて置きたいですが、
>その方法で、全く別のフォルダーにそっくり移して場合XLAの参照設定は
>元の場所を示してしまいます。
>この参照設定(XLA?)を使用しないで、クラス処理のようなことはできない
>のでしょうか?
>よろしくご教示ください。

Bookのパス指定に

ThisWorkbook.Path

を利用するといいのでは。

【48327】Re:アドインファイルの代替方法
質問  uchan  - 07/4/12(木) 23:24 -

引用なし
パスワード
   ▼kobasan さん:
>Bookのパス指定に
>
>ThisWorkbook.Path
>
>を利用するといいのでは。

アドインですと自動的にファイルを参照(OPEN)していますが、OPEN処理をコードして
ということでしょうか?
ユーザーには出来るだけ、共通処理のBOOKが開いていることが視覚的に見えないように
したいのですが?

【48328】Re:アドインファイルの代替方法
発言  kobasan  - 07/4/12(木) 23:40 -

引用なし
パスワード
   ▼uchan さん 今晩は。

>
>アドインですと自動的にファイルを参照(OPEN)していますが、OPEN処理をコードして
>ということでしょうか?
>ユーザーには出来るだけ、共通処理のBOOKが開いていることが視覚的に見えないように
>したいのですが?

Book1を開くなら、アドインのマクロに

  Workbooks.Open ThisWorkbook.Path & "\Book1"

のようなコードを入れればいいのでは。

文面からすると、Bookを選択するダイアログ開くようではないですね。

【48330】Re:アドインファイルの代替方法
発言  ichinose  - 07/4/13(金) 7:39 -

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

>XLAファイルを使って複数のBookから共通処理を可能にしていますが、
>XLAファイルは、BOOKと同一フォルダーにおいて置きたいですが、
>その方法で、全く別のフォルダーにそっくり移して場合XLAの参照設定は
>元の場所を示してしまいます。
>この参照設定(XLA?)を使用しないで、クラス処理のようなことはできない
>のでしょうか?

参照設定をしなくてもクラスのプロパティやメソッドの実行は可能です。
(オブジェクト変数を明示的に宣言はできませんが・・・)
と、前回リンクした

www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=8156;id=excel

でも例題を掲載しました。


が、ここでucahn さんのご質問には、ちょっと疑問を感じました。

>XLAファイルを使って複数のBookから共通処理を可能にしていますが、

複数のブックで使用できるような汎用的な処理をカプセル化した
オブジェクト(クラス)をアドイン(XLAファイル)として作成したのですよね?

>XLAファイルは、BOOKと同一フォルダーにおいて置きたいですが、

なのに特定のブックを対象にして、このアドインを特定のブックと
同じフォルダに置くのですか?


ということは・・・、

BOOK2でもこのアドインを使う場合は、BOOK2と同じフォルダに
このアドインを置くということですか?

せっかく汎用(共通)処理をパッケージ化したのにそれぞれの
フォルダにそのパッケージ化したファイルを置いておくのは、
本末転倒のような気がしますが、いかがですか?

私もucahn さんのように複数ブックで同じ処理を共有できるようなクラスを持ったアドインファイルを作成することがありますが、

アドインファイルは、適当なフォルダにひとつしか存在しません。
そのひとつを複数のブックで共有しています。
アドインを登録した状態で運用すれば、アドインファイルがどこにあるか
なんてことは、あまり問題になりませんけどね!!

それともどうしてもそれぞれのフォルダにアドインファイルを配置しなければ
ならない事情があるのですか?
だとしたら、そもそもアドインにすること自体に問題がないか
見直さなければならないかもしれませんよ!!

【48356】Re:アドインファイルの代替方法
発言  uchan  - 07/4/13(金) 22:15 -

引用なし
パスワード
   ▼kobasan さん こんばんわ
>Book1を開くなら、アドインのマクロに
>
>  Workbooks.Open ThisWorkbook.Path & "\Book1"
>
>のようなコードを入れればいいのでは。
>
>文面からすると、Bookを選択するダイアログ開くようではないですね。

ある処理をする(VBAでコードされた)EXCELファイルが複数あり少しずつ
機能が異なるのですが、基本的な処理はすべての機能で同一なため、
メンテナンスも考えると別ファイルにしておきたいのです。

また、操作中は共通処理のファイルがユーザーには開かれているのが
わからないようにして、呼び出し元ファイルと連動してOPEN、CLOSE
されるようにしたいのです。さらに複数の機能ファイルは同時にOPENできて
互いに影響しないようにしたいのです。
VBAで明示的にOPEN、CLOSEすると、致命的エラーが発生した場合、呼び出し元
のみCLOSEされて、共通ファイルは目に見えないのにCLOSEされないようなことが
あるかと思って、こんなことを皆さんに尋ねております。

【48357】Re:アドインファイルの代替方法
発言  uchan  - 07/4/13(金) 22:58 -

引用なし
パスワード
   ▼ichinose さん:
>
>参照設定をしなくてもクラスのプロパティやメソッドの実行は可能です。
>(オブジェクト変数を明示的に宣言はできませんが・・・)
>と、前回リンクした
>
>www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=8156;id=excel
>
>でも例題を掲載しました。
ありがとうございました。参照設定の方がBESTと思いコードして、
もうひとつの方法をわすれていました。


>複数のブックで使用できるような汎用的な処理をカプセル化した
>オブジェクト(クラス)をアドイン(XLAファイル)として作成したのですよね?
>
実は、XLAで参照設定はしたのですが、クラスモジュールではなく標準モジュールです。

>BOOK2でもこのアドインを使う場合は、BOOK2と同じフォルダに
>このアドインを置くということですか?
>
>せっかく汎用(共通)処理をパッケージ化したのにそれぞれの
>フォルダにそのパッケージ化したファイルを置いておくのは、
>本末転倒のような気がしますが、いかがですか?
>
機能としては、似たよう処理で8BOOKしかなくわざわざフォルダーを
わける必要もない(むしろ同一フォルダーにおきたい)ので、また
共通処理も、これら固有のものなので同一フォルダーで管理したいのです。

>だとしたら、そもそもアドインにすること自体に問題がないか
>見直さなければならないかもしれませんよ!!
>
そうなんです。アドインにしたため困っているのです。
というのは、機能修正で共通ファイルを修正する場合、別のテスト用の
フォルダーにそっくりコピーして修正するとき、参照設定をし直さないと
いけないので。

結局、アドインをやめ、標準モジュールをクラスモジュールに変更して
Application.run を使うのがベストなのかと思います。まだ未確認ですが。

【48365】Re:アドインファイルの代替方法
質問  ucahn  - 07/4/14(土) 17:44 -

引用なし
パスワード
   ▼ichinose さん:
お世話になります。

>www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=8156;id=excel
上記の記事のとおりテスト用に全く同じコードでためしましたが
実行時エラーとなり「アプリケーション定義、またはオブジェクト定義
エラーというメッセージを表示してうまくいきません。
XLAファイルをフルパスで設定したり思いつくところは試したつもりです。

ステップ実行しても、クラスを作成するFunctionで止まってしまい
詳細情報はわかりません。
何か思い当たることはございませんでしょうか?
よろしくお願いします。

【48384】Re:アドインファイルの代替方法
発言  ichinose  - 07/4/15(日) 18:44 -

引用なし
パスワード
   ▼ucahn さん:
こんばんは。

>
>>www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=8156;id=excel
>上記の記事のとおりテスト用に全く同じコードでためしましたが
>実行時エラーとなり「アプリケーション定義、またはオブジェクト定義
>エラーというメッセージを表示してうまくいきません。

リンクした投稿を行った当時は、Excel2000で確認しました。
本日、Excel2002で確認しましたが、正常に作動しています。

>実行時エラーとなり「アプリケーション定義、またはオブジェクト定義
>エラー

というエラーが再現できません。

今度は、ucahn さんが

「上記の記事のとおりテスト用に全く同じコードでためしましたが」という1行の

記述ではなく、

上記のエラーが再現する手順書を記述してください。
これは、Excelバージョンの記述から、
コードの表示などを箇条書きで記述してください。


>XLAファイルをフルパスで設定したり思いつくところは試したつもりです。
>
>ステップ実行しても、クラスを作成するFunctionで止まってしまい
>詳細情報はわかりません。
>何か思い当たることはございませんでしょうか?
>よろしくお願いします。

【48389】Re:アドインファイルの代替方法
発言  uchan  - 07/4/15(日) 23:30 -

引用なし
パスワード
   ▼ichinose さん:
こんばんは、なんどもすみません。
コーディング内容を記述しましたのでご確認ください。

>上記のエラーが再現する手順書を記述してください。
>これは、Excelバージョンの記述から、
>コードの表示などを箇条書きで記述してください。
>
Version Excel2003

プログラムのフォルダー D:\TEST

クラス処理EXCELファイル:TEST_CLS.xla
クラスモジュール「Cllas1」に
'==============================
Private mes As String
'==============================
Sub set_mes(dspmes As String)
  mes = dspmes
End Sub
'==============================
Sub disp_mes()
  MsgBox mes
End Sub

標準モジュール「Module1」
Public Function mk_cls()
  Set mk_cls = New Class1
End Function
--------------------------------------
呼び出し側Excelファイル:TEST_MAIN.xls
のThisWorkbookに、以下を記述
Sub test()
  Set clsobj = Application.Run("D:\TEST\TEST_CLS.xla!mk_cls")
  clsobj.set_mes "Classtest"
  clsobj.disp_mes
End Sub
し、testをステップ実行すると、TEST_CLS.xlaは呼び出されるのですが、
mk_clsのところで、メッセージボックスを表示します。

因みに、もう一つのクラスのインスタンスの作成方法でも試しましたが同じです。

以上です。
いかがでしょうか?

【48392】Re:アドインファイルの代替方法
発言  ichinose  - 07/4/16(月) 7:24 -

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

>コーディング内容を記述しましたのでご確認ください。
>Version Excel2003
>いかがでしょうか?

Excel2002で確認しましたが、やはり正常に作動しました。

しかし、
Excel2000、2002でもvbsからExcelを呼び出すとインスタンスの作成箇所で
エラーが発生しています。

Excel2003は持っていないので検証できませんが・・。

XLAファイルの作成しているクラスモジュールのプロパティのInstancingを
既定値の 1(Private)から、2(PublicNotCreatable)に変更して
試してみてください。

・Excelを起動し、対象のXLAファイルを読み込んでください。

・VBEを起動してください(Alt+F11)。

・対象クラスモジュールを表示させてください。
 このプロパティウインドウが表示されている場合もありますが、表示されていない
 場合、F4キーを押してください。プロパティウインドウが表示されるはずです。

・プロパティウインドウには、オブジェクト名に「Class1」と表示されていませんか?

・その下の行にInstancingという項目があります。

・クラスモジュール作成時には「1(Private)」となっています。

・これを「2(PublicNotCreatable)」に変更してください。

上書き保存してください。

これで再度試してみてください。

VBSからは、上記の方法で作動していますから、
もしかしたらうまくいくかもしれません。

私が今、考えられるのは以上です。

【48401】Re:アドインファイルの代替方法
発言  ucahn  - 07/4/16(月) 13:03 -

引用なし
パスワード
   ▼ichinose さん:
こんにちわ。

>XLAファイルの作成しているクラスモジュールのプロパティのInstancingを
>既定値の 1(Private)から、2(PublicNotCreatable)に変更して
>試してみてください。
>
これもすでに試しております。やはり同じです。

>
>私が今、考えられるのは以上です。
>いろいろありがとうございました。別の方法等考えます。

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