- ベストアンサー
Win2000 VB6.0 サーバーからもってきたファイルでマクロ実行をする時
【環境と将来の保管・使用方法】 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”の現在のアドレスを取得することができるのでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ドライブ割り当てで無く共有リソース名で指示してやればいいのでは \\サーバー名\ツールフォルダ\ツール.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のブックの存在するパスとなります
その他の回答 (3)
- nda23
- ベストアンサー率54% (777/1415)
VB6のプログラムにおいて、Appとは自身(プロセス)を指す組み込みオブジェクトです。 VB6のプログラムはロードモジュール(EXEファイル)を生成し、単独でプロセスを 形成するため、自プロセスが何処にあるExeファイルから起動されたかという 情報を元に処理先を決めるような対応を取ることができます。 一方、ExcelのVBAマクロは必ずワークブックに含まれ、自身のプロセスは無く、 親のExcelのプロセス内で稼動します。よって、プログラムはVBAを含む ワークブックから起動されたと考えて良く、ワークブックのPathが、VB6で言うところの 起動元のEXEファイルのパスと同じ意味を持つと言えます。 ExcelのVBAにもAppと同じ意味のApplicationオブジェクトがあります。 これはExcel自体のプロセスを指し、PathはExcelのインストール先です。
お礼
回答ありがとうございました。 VBAを自力でやっているだけに、行き当たりばったり開発をしている自分の弱い部分が見えてきたように思います。こういう知識を入れれば、もっと良いのですが、いかんせん、なかなか分かるように書いてある所も少なくて・・・(検索力が低いだけかもしれませんが)。 本当にありがとうございました。
- nda23
- ベストアンサー率54% (777/1415)
自身のプロセスが何というディレクトリから起動されたかはApp.Pathで 調べることが出来ます。
お礼
回答ありがとうございます。 App.Pathを検索してみたのですが、他のところで似たような質問での回答でもこのマクロを紹介されていましたが、ThisWorkbook.Pathとはどのような違いがあるのでしょう?使い方だけの違いですか?それとも目的によって違うのでしょうか? いまひとつ、違いを飲み込めません。 もしご教示願えたら幸いです。
- redfox63
- ベストアンサー率71% (1325/1856)
他のクライアント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 ) といった具合で ・・・
お礼
回答ありがとうございます。 質問の仕方が悪かったようなので、補足をしますと、 このツールはサーバーで起動することもできるが、クライアントの任意の場所に移動しても起動できるようにしたい(=サーバー以外の所は、フォルダアドレスを固定にしたくない) 従って、回答を戴いた'開発PC の所は、任意の場所のため、特定のアドレスを設定する仕様にしたくないのです。 もしよろしければ再度ご教示戴きたく。
お礼
再度ありがとうございます。 共有リソース名で指示したりする事もできるのですね。実はVBAでできる事は基本的なことしか知らなかったので、新しい発見でした。 App.Path と ThisWorkbook.Pathの違いなるほどです。似ていて、やれることは全然違うのですね。 redfox63さんの案で実行してみようと思います。 ありがとうございました。