
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は別です。)
最後に、最近、私は書き込みをやめてしまっていますので、この件では、すぐにフォローできないかもしれません。
ありがとうございます。
> プロジェクト・エクスプローラの中に、「プロジェクト名(****.XLA)」が、同時に出ているはずですから、プロテクト・パスワードが掛かっていなければ、クリックすると開けられるはずです。
ありました!
参照先 **(省略)**.XLA と書きましたが、正しくは
ATPVBAJP.XLAで、まさに「分析ツール」のようです。
これって、分析ツールをいれてないユーザーでも分析ツールを使えるようにしたということなのでしょうか?
No.1
- 回答日時:
「エクセル VBA 参照設定」で検索すると
下記のページがヒットしました。
http://officetanaka.net/excel/vba/tips/tips100.htm
当方、知識不足により質問に対して
直接の回答にはなりませんが、
少しでも参考になれば幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Visual Basic(VBA) VBAでファイル名を指定して保存するとき 4 2023/03/26 21:55
- Excel(エクセル) Excel 参照元の値を参照したい 1 2022/08/20 18:58
- Windows 10 壁紙フォルダが表示されない 1 2022/11/16 21:58
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) 差し込み印刷がうまくいかない 2 2022/07/29 12:26
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行すると メッセージボックスが表示されて okをク 4 2023/07/05 19:32
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Office2000でWeb関係が使用でき...
-
エクセルVBAで参照設定というフ...
-
メールサーバーの構築
-
不明なコマンドです("FROM")。...
-
mfc42.dllファイルってなんです...
-
Access2010 「演算子がありませ...
-
Bootcampで無線lan接続が出来ない
-
マクロ実行ボタンがコピー出来ない
-
MACのBootCampでWin10のインス...
-
ゾンビエクセル・・・(Exc...
-
【minecraft mod】macでの作成方法
-
【ExcelVBA】sheet作成時にマク...
-
エクセルでテキストを任意のセ...
-
Excel2010でふりがなが漢字にな...
-
オペランドが足りませんとコメ...
-
EXCELのオートフィルターマクロ...
-
パソコンにコンポーザーをイン...
-
オートメーションエラー
-
unix の mv コマンド
-
VBA シートの切り替えができな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IEのActiveXダウンロードがブロ...
-
Windowsドメイン環境でのVPN...
-
Microsoft Excel VBAの参照設定
-
Access VBA 参照設定とは・・?
-
エクセルVBAで参照設定というフ...
-
Excel2003のObjectLibrary
-
ハンゲームでログインできない...
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
【ExcelVBA】sheet作成時にマク...
-
オペランドが足りませんとコメ...
-
エクセルの文字間スペースを入...
-
VBA シートの切り替えができな...
-
mfc42.dllファイルってなんです...
-
Excel2010でふりがなが漢字にな...
-
エクセル/マクロ Exit Subが実...
-
InstallShieldWizardのエラー
-
AUTOCAD 2010でdwlファイルの場...
-
エクセル シート内のハイパー...
-
マクロ実行ボタンがコピー出来ない
おすすめ情報