- ベストアンサー
エクセルVBAで参照設定というフォルダは何?
エクセル2000です。 今はいない人の作成したエクセルのBOOKですが、修正をたのまれてみてみたところ、Visual Basic Editor で当該BOOKの標準モジュールフォルダのすぐ下に参照設定という見慣れないフォルダがあり、その中に「参照先 **(省略)**.XLA」というものがありましたが、クリックしてみても何も表示されません。 これは何でしょうか? どうやったら中身を見られるのでしょうか? へたにいじっておかしなことになりはしないかと不安です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >ATPVBAJP.XLAで、まさに「分析ツール」のようです。 こちら(XL2003)では、ATPVBAEN.XLA は、プロジェクトネームで、ATPVBAJP.XLA は、ファイル名のようです。 ファイルの ATPVBAEN.XLA もありますが、そちらが、VBA用です。(ファイル名の末尾の ENは、English の意味のようです) >これって、分析ツールをいれてないユーザーでも分析ツールを使えるようにしたということなのでしょうか? たぶん、そういうことですね。参照設定すれば、自動的に、そのファイルを呼び出しグローバル化します。ただ、その目的のアドインファイル自体をインストールしていない人には、無理ですね。 予め試してみないと、そのまま本チャンでは無理がありますが、参照設定せずに、アドインをオンにして使う方法で、私は、こんな風なコードをずいぶん前に考えたことがあります。どっちもどっちかもしれません。 今回、他の方法がないか探してみたのですが、他には良い方法が見当たりません。 以下は「分析ツール -VBA」アドインの設定なしでも可能です。 '------------------------------------------------- Sub AddinFunctionTest1() Dim Ret As Long Dim myDate As Date With AddIns("分析ツール - VBA") If .Installed = False Then .Installed = True End If On Error Resume Next Ret = Application.Run("'" & .FullName & "'!" & "WorkDay", #6/30/2008#, 20) End With If Ret > 0 Then myDate = CDate(Ret) 'MsgBox myDate End If End Sub
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 もう既に時間も経っているので、あまりアドバイスをしても役に立ちそうもないけれど、そのままになっているので気になりました。非常に特殊なケースですから、最終的にはご自身でやってもらうしかないです。 元の作った方が、あまり分からないままにおこなった可能性もあります。既存のもの以外のアドイン・ファイル(.xla)に対しては、めったに、そのようなことはしません。そのスタイルが出てくる例としては、"Solver" ぐらいです。 >当該BOOKの標準モジュールフォルダのすぐ下に参照設定 ということなら、「当該BOOK」のVBA 側に目的のファイルが参照設定されているということです。 それによって、 「参照先 **(省略)**.XLA」と、プロジェクトレベルで、共有されます。(メソッド、関数がグローバル・レベルになる、ということです。Public ステートメントを入れたところで、参照設定しなければ、グローバル・レベルになるわけではありません。) 一例を挙げると、「分析ツール」自体は、いくら、ワークシート側でアドインの設定をしても、その関数を、そのまま、VBA側で使えるわけではありません。一旦、VBA側で参照設定しないと、そのままでは使えないわけで、ワークシートとVBAは共通しているわけではありません。 そのままですと、VBAのユーザー定義関数でも、別のファイルのプロジェクトにあるものは、「コンパイルエラー: Sub または Function が定義されていません。」と出てしまいます。 分析ツールの「WorkDay」 関数では、通常は、このようなコードが必要になってしまいます。 Ret = Application.Run("ATPVBAEN.xla!" & "WorkDay", #6/29/2008#, 20) VBAの「参照設定」は、VBAレベルでの、マクロの共有化が目的です。 それを、「atpvbaen.xla」を、ツール-参照設定すると: Ret = WorkDay(#6/29/2008#, 20) 「Application.Run」が必要なくなります PERSONAL.XLS やアドイン・ファイルにユーザー定義関数やプロシージャを置いても、その内容を、そのままVBAレベルで、共有できるわけではありません。VBA側で参照設定しなければなりません。また、参照設定先は、非表示ブックにするというのが通例です。その理由は、単にアドインとかいう以外にも、参照設定先からは、直接ブックの終了できないからです。通常のワークシートからのマクロの呼び出しなら、参照設定など必要ありません。また、呼び出しされるプロジェクト・ファイル自体は、管理上の目的以外に、どこに置いても構いません。 >その中に「参照先 **(省略)**.XLA」というものがありましたが、クリックしてみても何も表示されません。 プロジェクト・エクスプローラの中に、「プロジェクト名(****.XLA)」が、同時に出ているはずですから、プロテクト・パスワードが掛かっていなければ、クリックすると開けられるはずです。".xla" を ".xls" に換えなくてはならないということはありません。 ただ、Application.Runで呼び出せるものに関しては、通常はそのような作り方をしません。いくら、内容を整理して作っていても、最終段階の編集では、呼び出しのプロシージャや関数が分かりにくくなるのです。関数のライブラリのようにして、何があっても実行時エラーを吐かないような作り方でないと、参照設定はうまくないのです。なお、パスワード・プロテクトされていても、特別なステートメントが施されていなければ、呼び出し可能です。 VBA側の参照設定は、通常は、コンパイルされたアドインのタイプ・ライブラリ(tlb)やダイナミック・ライブラリ(dll)が多いですが、古いファイルには、"xla" もあります。 プロジェクトにロックが掛かっていても、オブジェクトブラウザ(F2)で、それぞれのモジュールを見れば、ある程度の固有の関数やプロシージャ名は類推で分かるはずです。例を示すと、atpvbaen.xla の内容は、オブジェクトブラウザで、atpvbaen.xla を選択し、「VBA Functions and Subs」 のモジュールで、メンバや引数について見られます。ただ、残念なことに、引数の型が出てきませんので、既存のもの以外は、いろいろやってみるしかなくなってしまいます。なお、既存の関数は、ほとんど、戻り値を含めて、Variant 型にしています。 >へたにいじっておかしなことになりはしないかと不安です。 書き換えなければ、そんなことはありません。デジタル署名が入っていれば、開ければデジタル署名は失いますが、それで動かなくなることはありません。 後、#1さんの田中亨氏の Office TANAKAのサイトが気になりました。私も同じように調べてみたことはあります。その時に、私は、ExcelとAccess のプロジェクトの設計の考え方の違いというものを考えました。 If Ref.IsBroken Then .References.Remove Ref 田中氏は知っているのかは分かりませんが、「マクロで参照設定を操作する 」のコードは、Excelでは、あまり使いません。海外のサイトなどを調べても釈然としなかったことがあります。その時、Access は、ユーザーに参照設定をいじらせないようにして作るのですが、どうもExcelとは設計の考え方自体が違うように思いました。Excelでは、その対策としては、 1.相手のVersionに合わせて作る。 2.下位バージョンで作る。(ただし、Chartの一部は、上位互換性がありません) 3.ユーザーに参照設定を直接変更させる。 その3つの方法が挙げられます。私としては、現在、2の方法がベストだと思っています。(一旦、上位バージョンで作成したものを、下位バージョンに戻して、マクロ等を精査し、そのバージョンで保存したものを使い、再び、上位バージョンで検査するという方法です。下位バージョンだけで作ると、コードの内容が甘くなります。これは、あくまでも、BIFF8 フォーマット--97-2003間のことで、Excel 2007は別です。) 最後に、最近、私は書き込みをやめてしまっていますので、この件では、すぐにフォローできないかもしれません。
お礼
ありがとうございます。 > プロジェクト・エクスプローラの中に、「プロジェクト名(****.XLA)」が、同時に出ているはずですから、プロテクト・パスワードが掛かっていなければ、クリックすると開けられるはずです。 ありました! 参照先 **(省略)**.XLA と書きましたが、正しくは ATPVBAJP.XLAで、まさに「分析ツール」のようです。 これって、分析ツールをいれてないユーザーでも分析ツールを使えるようにしたということなのでしょうか?
- noah7150
- ベストアンサー率46% (116/251)
XLAはアドインファイルです。 中身を参照したいならxlsに変更し開くと見えたはず。 通常はXLSTARTに置いてると思うけど 私は面倒なのでマクロだけのシートもxlsのままで保存してます。 (非表示にはしてますが)
お礼
ありがとうございます。 問題のBOOKを自宅に送付したつもりで届いてなかったので会社にくるまでためせませんでした。 「参照先 **(省略)**.XLA」をXLSに変えようとクリックしてみても何の変化も現れずプロパティも表示されずどうしようもありませんでした。
- nobu555
- ベストアンサー率45% (158/345)
「エクセル VBA 参照設定」で検索すると 下記のページがヒットしました。 http://officetanaka.net/excel/vba/tips/tips100.htm 当方、知識不足により質問に対して 直接の回答にはなりませんが、 少しでも参考になれば幸いです。
お礼
ありがとうございます。 みましたがどうも違うようです。
お礼
書き込みをお休み?しているにもかかわらずお答えいただき感謝いたします。 いろいろありがとうございました。