
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
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は別です。)
最後に、最近、私は書き込みをやめてしまっていますので、この件では、すぐにフォローできないかもしれません。
この回答へのお礼
お礼日時:2008/06/30 14:27
ありがとうございます。
> プロジェクト・エクスプローラの中に、「プロジェクト名(****.XLA)」が、同時に出ているはずですから、プロテクト・パスワードが掛かっていなければ、クリックすると開けられるはずです。
ありました!
参照先 **(省略)**.XLA と書きましたが、正しくは
ATPVBAJP.XLAで、まさに「分析ツール」のようです。
これって、分析ツールをいれてないユーザーでも分析ツールを使えるようにしたということなのでしょうか?
No.1
- 回答日時:
「エクセル VBA 参照設定」で検索すると
下記のページがヒットしました。
http://officetanaka.net/excel/vba/tips/tips100.htm
当方、知識不足により質問に対して
直接の回答にはなりませんが、
少しでも参考になれば幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Excel VBAの参照設定
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
7-ZIPエラー
-
【ExcelVBA】sheet作成時にマク...
-
エクセル 「実行時エラー"13":...
-
AUTOCAD 2010でdwlファイルの場...
-
エクセルの文字間スペースを入...
-
マクロ実行ボタンがコピー出来ない
-
VBA シートの切り替えができな...
-
pythonでrequestsが使えない
-
パソコンにコンポーザーをイン...
-
mfc42.dllファイルってなんです...
-
エクセルをエクセレントに究める
-
貼り付けをマクロで禁止させたい。
-
Excel2010でふりがなが漢字にな...
-
Openofficeがクラッシュ
-
『PHP』 MAMPで$_SERVER["REMOT...
-
マイクロソフトのMSXML 4.0Serv...
-
漢字名のテーブルとカラムのCRE...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access VBA 参照設定とは・・?
-
IISで作ったWebServerをIE9で見...
-
Microsoft Excel VBAの参照設定
-
Excel2003のObjectLibrary
-
エクセルVBAで参照設定というフ...
-
vb2012 参照設定しているも...
-
Active Server Page の posting...
-
IEのActiveXダウンロードがブロ...
-
Access2000の互換性
-
Office2000でWeb関係が使用でき...
-
HPでロリポップのCGIカウンター...
-
WebMatrixでのMoodle公開サーバ...
-
不明なコマンドです("FROM")。...
-
パソコンにコンポーザーをイン...
-
Access2010 「演算子がありませ...
-
オペランドが足りませんとコメ...
-
Excel2010でふりがなが漢字にな...
-
【ExcelVBA】sheet作成時にマク...
-
VBA シートの切り替えができな...
-
AUTOCAD 2010でdwlファイルの場...
おすすめ情報