プロが教えるわが家の防犯対策術!

【環境と将来の保管・使用方法】
Windows 2000/VB6.0 であるツールを作っています。
このツールは現在自分のPCで、VBAで組んでおりますが、完成後は常に会社の部のサーバーに保存しておき、誰でも使えるようにします。また、このツールで参照するファイルも、同じ場所に保存しています。
ツールファイルの方ですが、各自が各自のPCにコピーして実行できるようにしたいと思っています。各自がコピーする先は、CドライブかDドライブかは任意にしておきたいと思っています。

【現状のプログラミング状況】
さて、本題となるのですが、このコピーしたツールのファイルが、共通サーバーにあるファイルを使ってチェックする際、ドライブ名\ファイル名をセットして使用しています。
例: Gドライブ:部の共通サーバー
Set 参照ファイル = GetObjext(G:\○○サーバー\ツールフォルダ\チェックシート.xls
しかし、それに対し、ツールファイルは自分のPCで作っていることもあって、Cドライブ:自分のPC 
Set ツール = GetObject(D:\○○ツール格納フォルダ\ツール.xls
と指定して、
If ツール.Sheet("A").Cells(X,Y) = 参照ファイルSheet("AAA").Cells(x,y) Then
Aの処理
Else
Bの処理
End If
のようにしていますが、共通のサーバーに置いておくツールとなると、Dドライブとか勝手に最初に指定してGetObjectはできません。

良く、フォルダを指定してファイルを開くというダイアログ(?)を開くやり方が載っていますが、このツールには他ファイルを参照してチェックをする以外に、自ブックの中で他シートを参照するだけでチェックをする機能もあるため、こういうダイアログを、ある機能のためだけに使ったりする仕様には作りたくありまあせん。

このような場合に、どうやったら、その各PCにコピーされた”ツール.xls”の現在のアドレスを取得することができるのでしょうか?
よろしくお願いします。

A 回答 (4件)

他のクライアントPCにD:\○○ツール格納フォルダ\ツール.xlsが存在しないなら


Dir関数などで『D:\○○ツール格納フォルダ\ツール.xls』を取得してみて ""かどうかをチェックしてみましょう

dim ss as string
ss = Dir("D:\○○ツール格納フォルダ\ツール.xls", vbNormal)
if ss == "" then
  ' クライアントPC
  ss = "G:\○○サーバー\ツールフォルダ\"
else
  ' 開発PC
  ss = "D:\○○ツール格納フォルダ\"
End if
ss = ss & "チェックシート.xls"

Set ツール = GetObject( ss )
といった具合で ・・・
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

質問の仕方が悪かったようなので、補足をしますと、
このツールはサーバーで起動することもできるが、クライアントの任意の場所に移動しても起動できるようにしたい(=サーバー以外の所は、フォルダアドレスを固定にしたくない)

従って、回答を戴いた'開発PC の所は、任意の場所のため、特定のアドレスを設定する仕様にしたくないのです。

もしよろしければ再度ご教示戴きたく。

お礼日時:2008/06/01 22:31

自身のプロセスが何というディレクトリから起動されたかはApp.Pathで


調べることが出来ます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

App.Pathを検索してみたのですが、他のところで似たような質問での回答でもこのマクロを紹介されていましたが、ThisWorkbook.Pathとはどのような違いがあるのでしょう?使い方だけの違いですか?それとも目的によって違うのでしょうか?

いまひとつ、違いを飲み込めません。
もしご教示願えたら幸いです。

お礼日時:2008/06/01 22:35

ドライブ割り当てで無く共有リソース名で指示してやればいいのでは


\\サーバー名\ツールフォルダ\ツール.xls でGetObjectする

開発PCかの判断については環境変数などから読み取るとか
COMPUTERNAME=Developer01
UserName=VB60
とかの設定なら
if Environ("COMPUTERNAME")= "Developer01" and Environ("UserName")="VB60" then
などで判断出来ます
または 特定のActiveXオブジェクトがCreateObjectで作成できれば開発環境だ
とか、クライアントと違いを判断出来る材料が必要でしょう

App.Pathは VB6で開発されたアプリのEXEのパスが格納されます
Thisworkbook.Pathは Excelのブックの存在するパスとなります
    • good
    • 0
この回答へのお礼

再度ありがとうございます。

共有リソース名で指示したりする事もできるのですね。実はVBAでできる事は基本的なことしか知らなかったので、新しい発見でした。

App.Path と ThisWorkbook.Pathの違いなるほどです。似ていて、やれることは全然違うのですね。

redfox63さんの案で実行してみようと思います。
ありがとうございました。

お礼日時:2008/06/02 21:43

VB6のプログラムにおいて、Appとは自身(プロセス)を指す組み込みオブジェクトです。


VB6のプログラムはロードモジュール(EXEファイル)を生成し、単独でプロセスを
形成するため、自プロセスが何処にあるExeファイルから起動されたかという
情報を元に処理先を決めるような対応を取ることができます。

一方、ExcelのVBAマクロは必ずワークブックに含まれ、自身のプロセスは無く、
親のExcelのプロセス内で稼動します。よって、プログラムはVBAを含む
ワークブックから起動されたと考えて良く、ワークブックのPathが、VB6で言うところの
起動元のEXEファイルのパスと同じ意味を持つと言えます。
ExcelのVBAにもAppと同じ意味のApplicationオブジェクトがあります。
これはExcel自体のプロセスを指し、PathはExcelのインストール先です。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

VBAを自力でやっているだけに、行き当たりばったり開発をしている自分の弱い部分が見えてきたように思います。こういう知識を入れれば、もっと良いのですが、いかんせん、なかなか分かるように書いてある所も少なくて・・・(検索力が低いだけかもしれませんが)。

本当にありがとうございました。

お礼日時:2008/06/02 21:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!