• ベストアンサー

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”の現在のアドレスを取得することができるのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

ドライブ割り当てで無く共有リソース名で指示してやればいいのでは \\サーバー名\ツールフォルダ\ツール.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のブックの存在するパスとなります

007_taro
質問者

お礼

再度ありがとうございます。 共有リソース名で指示したりする事もできるのですね。実はVBAでできる事は基本的なことしか知らなかったので、新しい発見でした。 App.Path と ThisWorkbook.Pathの違いなるほどです。似ていて、やれることは全然違うのですね。 redfox63さんの案で実行してみようと思います。 ありがとうございました。

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

VB6のプログラムにおいて、Appとは自身(プロセス)を指す組み込みオブジェクトです。 VB6のプログラムはロードモジュール(EXEファイル)を生成し、単独でプロセスを 形成するため、自プロセスが何処にあるExeファイルから起動されたかという 情報を元に処理先を決めるような対応を取ることができます。 一方、ExcelのVBAマクロは必ずワークブックに含まれ、自身のプロセスは無く、 親のExcelのプロセス内で稼動します。よって、プログラムはVBAを含む ワークブックから起動されたと考えて良く、ワークブックのPathが、VB6で言うところの 起動元のEXEファイルのパスと同じ意味を持つと言えます。 ExcelのVBAにもAppと同じ意味のApplicationオブジェクトがあります。 これはExcel自体のプロセスを指し、PathはExcelのインストール先です。

007_taro
質問者

お礼

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

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

自身のプロセスが何というディレクトリから起動されたかはApp.Pathで 調べることが出来ます。

007_taro
質問者

お礼

回答ありがとうございます。 App.Pathを検索してみたのですが、他のところで似たような質問での回答でもこのマクロを紹介されていましたが、ThisWorkbook.Pathとはどのような違いがあるのでしょう?使い方だけの違いですか?それとも目的によって違うのでしょうか? いまひとつ、違いを飲み込めません。 もしご教示願えたら幸いです。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

他のクライアント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 ) といった具合で ・・・

007_taro
質問者

お礼

回答ありがとうございます。 質問の仕方が悪かったようなので、補足をしますと、 このツールはサーバーで起動することもできるが、クライアントの任意の場所に移動しても起動できるようにしたい(=サーバー以外の所は、フォルダアドレスを固定にしたくない) 従って、回答を戴いた'開発PC の所は、任意の場所のため、特定のアドレスを設定する仕様にしたくないのです。 もしよろしければ再度ご教示戴きたく。

関連するQ&A

  • エクセルマクロ コピー元と貼り付け先を指定してコピー&ペーストを実行するマクロ

    単刀直入にやりたいことを述べます。 Cドライブと仮定します。3つのBOOKがあります。 それぞれ ----- BOOK1.xls「○○Sheet」・・・(実行するファイル)   A 1 BOOK2.xls「△△Sheet」・・・(コピーするファイル名の指定です) 2 A2:E2・・・(コピーするセル範囲の指定) 3 BOOK3.xls「□□Sheet」・・・(貼り付け先のファイル名の指定です) 4 A5・・・(貼り付け先のセルの指定) ----- BOOK2.xls「△△Sheet」・・・(コピー元ファイル)   ABCDE 1 あいうえお 2 かきくけこ 3 ・・・・・ ----- BOOK3.xls「□□Sheet」・・・(貼り付け先のファイル)   ABCDE 1 ・・・・・ 2 かきくけこ・・・(貼り付け) 3 ・・・・・ ----- >やりたいこと BOOK1.xls「○○Sheet」のA1のセルの値とA2セルの値を参照し、 その該当BOOKのセル範囲(BOOK2.xls「△△Sheet」のA2:E2)をコピーして、 BOOK1.xls「○○Sheet」のA3のセルの値と、A4セルの値を参照し、 その該当BOOKのセル範囲(BOOK3.xls「□□Sheet」のA5)へペーストする。 別のブックの指定したセルの値を別のブックの指定したセルへ貼り付けるだけなんですが、 以前関数を使って似たような事をしようとしたのですが、うまくいかなかったので、マクロならできるのでしょうか。 よろしくお願いします。(ちなみにエクセル2000又は2003です)

  • 2つのエクセルファイルのオブジェクトどちらがActiveか知る方法

    ACCESSのVBAにおいてです Set Xls = GetObject("File1.xls") Set Xls2 = GetObject("File2.xls") Xls.Application.Windows(1).Visible = True Xls2.Application.Windows(1).Visible = True Xls.Application.worksheets("Sheet1").Activate こんな風にして行って、 File1.xls File2.xls のCellを参照しています この場合どちらのSheet1、がActive、なのか知るのに どんな命令語を使うのですか よろしくおねがいします 実は、Xls、Xls2、のオブジェクト名では File1.xls、File2.xls、の区分ができなくて困っています しかし、今の質問はどちらがActiveか知る手立てが わかればたすかります

  • ACCESSのVBで、エクセルファイルの最終行を取得

    題名の通り ファイルの最終行を知りたいのです ざっと エクセルファイルをオープンするは下記のように すると思いますが その後、最終行を取得するのに、どうするのか 教えてください ーーーーーーーーー------------ Set Xls = GetObject("エクセルのファイル") Xls.Application.Windows(1).Visible = True Xls.Application.worksheets("Sheet1").Activate

  • AccessVBAで実行時エラー'429'が出ます

    ACCESS2000,WindouwsME ACCESSから既存のEXCELブックを呼び出そうとしていますが、           略 EXCEL名 = S2 & "XXX.xls" Set xls = GetObject(EXCEL名, "Excel.Sheet")        略 の、2行目で以下のエラーが出てしまい困っています。 実行時エラー'429' ActiveXコンポーネントはオブジェクトを作成できません。 動かすパソコンの環境で、出る時と出ない時があるようです。 VBEのツールメニューから参照設定を確認しているつもりですが、 ここの理解も含めて原因が良くつかめません。 解決策をコメントできる方がおられましたらお願いいたします。

  • エクセルの立ち上げ時とマクロ実行時の再計算について

    なぜ同じ形式のファイルで同じようなことをマクロで実行させているだけなのに 一つだけ立ち上げ時と再計算時に時間がかかるか教えてください。 各フォルダ(東京・神奈川・千葉・埼玉)にアクセスからエクスポートしたExcelファイル(A・B・C・D)と、それを集計する合計.xlsがあります。 合計.xlsのマクロボタンを押下することによって A・B・C・Dが立ち上がり、それぞれが合計.xlsのsheet2~5に貼りつき、A・B・C・Dを閉じます。 合計.xlsのSheet1にはマクロボタンとSheet2~5を集計するための表があり、Sheet2~5からvlookupで数値を引っ張ってきています。 ●各フォルダに入ってるファイルは同じ形です。 ●フォルダ(東京・神奈川・千葉)は立ち上げもマクロ実行時も数秒で計算が完了します。 フォルダ(埼玉)だけは立ち上げ時に3分以上かかり、どこかクリックする度に再計算(これも3分以上)されてしまいます。 3分位待ってればいいのですが、なぜ(埼玉)の合計.xlsだけがそうなってしまうのか、わかる方がいらっしゃれば教えてください。 マクロ作成時、確認をしたときは他と同じでした。 今日他の人が合計.xlsを何度か強制終了したとのことですが、これが原因になったりしますか? ちなみに他フォルダ(東京)からファイルをコピーしマクロ&関数を修正してみましたがダメでした。 フォルダ(埼玉)に問題があったりするのでしょうか?

  • EXCELのボタンによるマクロの登録名にファイル名が入ってしまう

     EXCEL2003を使用しています。  ネットワーク上の共有フォルダ上にEXCELファイルがあり、マクロを作成しボタンを配置して、クリックすると起動するようにしています。  そのファイルをコピーして場所を変えると、ボタンで参照されている(起動する)マクロが変わってしまいます。  たぶん書き方の問題と思うのですが、いい記述方法はないでしょうか?  具体的には、共有フォルダ上の「\\common\Book1.xls」 に、「CopyData」というマクロがあり、ボタンを配置して登録したとします。  そのままでは正しく起動します。  次に共有フォルダ上で同じBook1.xlsをコピーし、ローカルに移しててファイルを編集し、先のボタンをクリックして作業させようとしたのですが、ボタンでの登録が「\\common\Book1.xls!CopyData」のようになってしまい、うまく動作しません。  起動させたいのは「今開いているBookのマクロ」なのですが... ※シートでセルに参照式を入れると似たようなことが起こります。  参照式が入っているシートをコピーして他で編集し書き戻そうとしても、パスが追加され、うまくいきません。  合せてご存じの方、ご教示頂ければと思います。  以上、よろしく御願い致します。

  • excelでの外部参照について

    社内で以前に作成されたファイルのため詳細がわからないのですが、他のファイルへの外部参照について教えてください。 バージョンはExcel2002 sp2です。問題のファイルはネットワーク上にある共有ホルダーにあります。セルで「=IF($A1=0,0,$A1*'\\サーバ名\フォルダー名1\フォルダー名2\[ファイル.xls]シート名'!B1)」という式が設定されています。このファイル(参照しているファイルも含めてフォルダーごと)を自分のPCのデスクトップにコピーしたところ、ある一部のセルでのみ、「=IF($A1=0,0,$A1*'C:\フォルダー名2\[ファイル.xls]シート名'!B1)」というふうに勝手にパスが変わってしまうのです。 「編集」-「リンクの設定」でいちいち直しているのですが、元の場所からコピーしても、パスが変わらないようにしたいです。または、コピーする時はフォルダーごとコピーするので、それに合わせて「\\サーバ名」がコピー先のドライブ名に変わるようにしたいです。元のファイルの式を眺めても違いがわからず、何故一部のセルの式だけ書き換わってしまうのかわからず困っています。 いろいろ検索しましたが、回答が見つけられず、質問させていただきました。ご教授ください。

  • Excelでの外部ファイル参照

    環境:windowsXPPro、Excel2000 初めまして。 Excelの外部ファイル参照で悩んでいることがあり解決方法を模索中です。 基礎値.xls、集計.xls というBookがネットワーク上のファイルサーバーにあるのですが 集計.xlsに基礎値.xlsの値を参照する式がセルに設定されています。 [=vlookup(a1,'\\server\[基礎値.xls]Sheet1'!$A$1:$B$50,2,false)] 2つのファイルが同じサーバーのフォルダーにある場合は問題ないのですが、 集計値.xlsを各ローカルPCに移動して使用したところ基礎値.xlsの参照先が [=vlookup(a1,'c:\job\[基礎値.xls]Sheet1'!$A$1:$B$50,2,false)] となってしまいサーバー上のファイルを参照してくれません。 VBAなどで細工すれば解決はすると思いますが、マクロ・VBAを使わないで運用しなくてはなりません。 ファイルを移動させても参照先フォルダーを固定させるよい方法はないでしょうか?

  • 同じフォルダ内にあるファイルを開くマクロ

    いつもお世話になります。 EXCEl2000で、フォルダ内に2コのエクセルファイル「A.xls」「B.xls」があり、「A.xls」でマクロを実行する際に、「B.xls」を開きたいのですが、ファイルのパスを設定すると、フォルダを別の場所に動かしたり、別のパソコンにコピーすると開けなくなります。 「同じフォルダの中にある「B.xls」を開く」という命令文の作成は可能でしょうか。

  • IIS+ASPで実行可能なサーバと不可能なサーバがある

    現在、IISとASPを使用してアプリケーションを動かしています。 データベースにMDBファイルを使用し、データの 登録・参照・削除をASPで行っています。 都合によりIISサーバを違うPCに移し変えることになりました。 ファイルをコピーして、IISの設定を同じにしましたが、 クライアントからデータの書き込みをすると「ページを表示できません」 と出てしまいます。エラーの理由としてデータの追加を行っている ASPファイルの「(レコードセット).AddNew」の行で 「データベースまたはオブジェクトは読み取り専用なので、更新できません」 ということなのですが、今までのサーバでは動いていたファイルを そのままネットワーク経由でコピーしただけなので 修正方法がわかりませんでした。 IISの設定はあまり詳しくないので、不足している情報が あれば追記いたします。 OSは新PC・旧PCともにWindowsXP Pro(SP1)です。 ご指導よろしくお願いいたします。