• ベストアンサー

エクセルVBAで参照設定というフォルダは何?

エクセル2000です。 今はいない人の作成したエクセルのBOOKですが、修正をたのまれてみてみたところ、Visual Basic Editor で当該BOOKの標準モジュールフォルダのすぐ下に参照設定という見慣れないフォルダがあり、その中に「参照先 **(省略)**.XLA」というものがありましたが、クリックしてみても何も表示されません。 これは何でしょうか? どうやったら中身を見られるのでしょうか? へたにいじっておかしなことになりはしないかと不安です。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

merlionXX
質問者

お礼

書き込みをお休み?しているにもかかわらずお答えいただき感謝いたします。 いろいろありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 もう既に時間も経っているので、あまりアドバイスをしても役に立ちそうもないけれど、そのままになっているので気になりました。非常に特殊なケースですから、最終的にはご自身でやってもらうしかないです。 元の作った方が、あまり分からないままにおこなった可能性もあります。既存のもの以外のアドイン・ファイル(.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は別です。) 最後に、最近、私は書き込みをやめてしまっていますので、この件では、すぐにフォローできないかもしれません。

merlionXX
質問者

お礼

ありがとうございます。 > プロジェクト・エクスプローラの中に、「プロジェクト名(****.XLA)」が、同時に出ているはずですから、プロテクト・パスワードが掛かっていなければ、クリックすると開けられるはずです。 ありました! 参照先 **(省略)**.XLA と書きましたが、正しくは ATPVBAJP.XLAで、まさに「分析ツール」のようです。 これって、分析ツールをいれてないユーザーでも分析ツールを使えるようにしたということなのでしょうか?

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.2

XLAはアドインファイルです。 中身を参照したいならxlsに変更し開くと見えたはず。 通常はXLSTARTに置いてると思うけど 私は面倒なのでマクロだけのシートもxlsのままで保存してます。 (非表示にはしてますが)

merlionXX
質問者

お礼

ありがとうございます。 問題のBOOKを自宅に送付したつもりで届いてなかったので会社にくるまでためせませんでした。 「参照先 **(省略)**.XLA」をXLSに変えようとクリックしてみても何の変化も現れずプロパティも表示されずどうしようもありませんでした。

  • nobu555
  • ベストアンサー率45% (158/345)
回答No.1

「エクセル VBA 参照設定」で検索すると 下記のページがヒットしました。 http://officetanaka.net/excel/vba/tips/tips100.htm 当方、知識不足により質問に対して 直接の回答にはなりませんが、 少しでも参考になれば幸いです。

merlionXX
質問者

お礼

ありがとうございます。 みましたがどうも違うようです。

関連するQ&A

  • VBAについて教えて下さい。

    VBAの事について教えて下さい。 初心者です。本で読んだのですが、エクセルのツールから、 マクロ→Visual Basic Editorをクリックすると、 Microsoft Visual Basic‐Book1と言う画面で、 左側に VBA Project(Book1)と言う画面になるとなっていますが、 Microsoft Visual Basic‐Excel_JSV7.xlaと言う画面になり、 Excel_JSV7.xla‐JSV7Transk JSheet(コード)と他に2つが出てきます。 こんな時は、どうすれば直るのでしょうか?  どなたか作業の仕方を教えていただけないでしょうか。

  • Excelの外部参照と書式設定について。

    いつもお世話になっております。 Excelの外部参照についてですが、 例えばBook1のA1にBook2のA1が外部参照していたとします Book1のA1が黄色に塗りつぶしされていたとしたらBook2のA1も 自動的に黄色に塗りつぶしされる様にしたいのです。 ”条件付き書式”設定も考慮したのですが、Book1のA1を塗りつぶす条件 は人の判断でその時に応じて変わる為に単純にBook1のA1が黄色なら Book2のA1も同じ黄色としたいのです。 OSはWindows95,Excelは97を使用しております。 どうか宜しくお願い致します。

  • エクセルVLOOKUP関数の参照先に関して

    エクセルのVLOOKUP関数に関する質問です。 BOOK(1)とBOOK(2)(それぞれは別フォルダに入っています)があり、 BOOK(1)の中でVLOOKUP関数を用いて、BOOK(2)からデータを参照しています。 参照先のBOOK(2)は管理者以外読み取り専用となっていますが、 たとえ保存できなくても誰かがデータを書き換えたり、別名で保存したりすると、VLOOKUPの参照結果も、書き換え後のデータ(別名保存したファイル)になってしまうようです。 希望としては、VLOOKUPの参照先であるBOOK(2)を固定したいです。 この件に関して、対処法はありますでしょうか。

  • エクセルで別ファイルの値を参照

    いまBOOK1.xlsがBOOK2.xlsの値を参照しています BOOK1.xlsのどこかのセルにBOOK3と入れるとBOOK3.xlsの値を参照するようにできますか? BOOK2とBOOK3はシートなどは値が違うだけで全く同じ構成です エクセルバージョンは2003です よろしくお願いします

  • Excel VBA:モジュールを複数のブックで共有するには

    お世話になります。 現在、Excel VBAで複数のプログラムを開発中なのですが、 ある程度 処理を共通化したいと思いまして、出来れば標準モジュールと クラスモジュールを別のブックに保存しておき、それを参照設定か何かで 取り込んで動作させたいと思っています。 でも、参照設定しようとしても何かの名称が重複しているらしいエラーが 表示され(しかも何が重複しているのか教えてくれない)、うまくいきません。 ちなみに、共有したいブックは移動する可能性もありますが、最悪、 サーバの固定的なフォルダに置いておくのでも可、と言われています。 (アドインでの取り込みは、この時点で不可能?) うまく(出来れば標準モジュールとクラスモジュールだけ)共有することは できないものでしょうか? 当方、VBの経験は そこそこあるのですが、VBAは 大して使ったことが無い状態です。 もしかしたら、単純にやり方を知らないだけかもしれないのですが、 知恵をお貸しいただければ有難いです。

  • Excelの被参照セルを知りたいです。

    ExcelのあるBookのあるセルの値を参照している別のブックがあります。 この値を参照しているBookのSheet、Cellを知りたいです。 つまり、この値はどこから参照されているのでしょうか? 過去ログも調べましたが、該当ありませんでしたので質問させていただきます。 よろしくお願いします。 環境はExcel2003SP2、WinXPSP2です。

  • vbaで参照設定する方法

    sub フォルダをコピーする() Dim myFSO As New FileSystemObject myFSO.CopyFolder "D:\TEST", "D:\TEST2" End Sub を実行したいのですが、 Visual Basic Editor の [ツール]-[参照設定] で、 "Microsoft Scripting Runtime" にチェックせずに、 vbaで参照設定する方法を教えてください。 バージョンは2007です。 ご回答よろしくお願いします。

  • エクセルで他のファイルを参照しているデータを更新する方法

    エクセル2007についての質問です。 2つのファイルBook1とBook2があります。Book1はBook2のデータを参照しています。ある作業をするとき、Book1は常時エクセルで開いています。Book2はあるソフト(自作)を使ってエクセルを開くことなくデータを更新しています(直接にBook2を編集していません)。このとき、Book2のデータが更新されても参照元のBook1のデータが更新されません。Book2をエクセルで開いたときにBook1が更新されます。Book2をエクセルで開くことなく参照元のBook1を自動及び手動で更新する方法はあるでしょうか。(エクセルのデータタブの「すべて更新」を実行すれば更新されるかと思いましたが駄目でした。) Book1を更新するのためにいちいちBook2を開かなければならず不便を感じています。良い方法があればどうかよろしくお願いします。

  • エクセル)VBAで他のブックのセル参照

    はじめまして。 エクセルのVBAについて教えてください。 VBAで、 book1のsheet1のセルA1にあるデータを開いていない(アクティブでない)別のbook2のsheet2のセルB1にコピーしたいのですがこんなことってできるのでしょうか? ・・やはり開いていないとダメなんでしょうか? あと、これって"ブック参照"っていうことなんでしょうか?自分がやりたいことが何なのか判らないので上手く調べる事が出来ず難儀しています。 よろしくお願いします。

  • 参照設定の有効範囲

    VBAのコード追加を勉強していて、 ブックaに以下の参照設定を追加しました。 「microsoft visual basic applications extencibility」 そして、以下の記述をしてみたところ上手く機能しました。 「CodeModule.InsertLines 20, "msgbox now()"」 色々試したアト、当該ブックaを閉じました。 そして別のブックbを開いて上記参照設定がされていないことを確認しましたが、 念のためにブックaで試した記述を書いてみたところ、 ブックaと同じように機能してしまいました。 参照設定にはされていないことを確認しているのですが、不思議です。 参照設定は一度登録(設定)すると、何時まで有効なのでしょうか。 明示的に参照取り消し(削除など)をしないといけないのでしょうか。 宜しくお教え下さい。

専門家に質問してみよう