Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : 指定なし)
別のExcelで開いた?ブックの参照
投稿日時: 22/06/24 21:02:26
投稿者: Yaima

 
オンラインシステムでデータ検索し、その結果がExcel(.xls形式)で表示されます。
 
別のExcelブックを開き、オンラインシステムから開いたブックを参照しようと
しましたが見えません。
別のExcelブック側のVBEのプロジェクトエクスプローラーで確認しても、
オンラインシステムから開いたブックは見当たりません。
 
これは、2つのExcelブックが別のExcelで開かれているため参照できないということでしょうか。
 
実現したい処理は、オンラインシステムから開いたブックにあるシートを別に開いた
ブックへのコピーです。

回答
投稿日時: 22/06/24 21:43:38
投稿者: WinArrow
投稿者のウェブサイトに移動

VBAで対応しなければいけないのですか?
 
一般機能で
オンラインシステムで開いているブックの
シートを新しいブックに複写し、任意の名前で保存するとよいです。
 
シートタブを右クリックして複写、⇒新しいブックを選択

回答
投稿日時: 22/06/24 21:44:06
投稿者: hatena
投稿者のウェブサイトに移動

下記でどうでしょう。
 

Dim xlApp As Object
set xlApp = GetObject(, "Excel.Application")

 
 
VBA の GetObject 関数と CreateObject 関数 - Office | Microsoft Docs
https://docs.microsoft.com/ja-jp/office/troubleshoot/office-suite-issues/getobject-createobject-behavior

回答
投稿日時: 22/06/24 22:08:36
投稿者: hatena
投稿者のウェブサイトに移動

Yaima さんの引用:
これは、2つのExcelブックが別のExcelで開かれているため参照できないということでしょうか。

 
オンラインシステムが別インスタンスのExcel.Applicationを開いているのでしょう。
 
上の回答のGetObjectは別インスタンスのExcel.Applicationを取得できます。
 
ただし、リンク先にもありますが、最初に起動されたExcel.Applicationを取得しますので、先にオンラインシステムのブックが開いている必要があります。[/quote]

回答
投稿日時: 22/06/24 23:50:33
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

オンラインシステムでデータ検索し、その結果がExcel(.xls形式)で表示されます。

このExcelについての質問です。
 
(1)このブックは、当該PCにファイルとして保存されていますか?
   xls形式と書いてあるので、どこかのPCには保存されているとは思いますが・・・
(2)このファイルのファイル名は固定でしょうか?可変でしょうか?
 

投稿日時: 22/06/25 06:39:22
投稿者: Yaima

WinArrowさん ありがとうございます。
 
(質問)
VBAで対応しなければいけないのですか?
(状況)
行おうとしている作業は、複数の担当者が携わるので、
VBAでの半自動化対応を考えています。
 
(質問)
このExcelについての質問です。
(1)このブックは、当該PCにファイルとして保存されていますか?
   xls形式と書いてあるので、どこかのPCには保存されているとは思いますが・・・
(状況)
使用しているPCはネットワークに接続されており、ネットワークシステムの画面から
Excel出力のボタンをクリックするとPCに表示され、表示されたExcelの画面上部中央に
表示されるファイル名で、xls形式と判断しています。
ローカルのPCには、ファイルとして保存されておらず、表示されたExcelを閉じると
何も残りません。
ただし、オンラインシステムがPC内の特定の場所(ユーザーが使わない場所)に
保存しているかは確認していません。
 
(質問)
(2)このファイルのファイル名は固定でしょうか?可変でしょうか?
(状況)
オンラインシステムからPCの画面上に開かれるブック名は固定です。
 
 
hatenaさん ありがとうございます。
試してみます。

回答
投稿日時: 22/06/25 07:36:39
投稿者: WinArrow
投稿者のウェブサイトに移動

状況のご説明、ありがとうございます。
拡張子が付いているということは、オンラインシステムが、
ローカルPCの特定フォルダ内に保存していると思います。
  
私見ですが、
オンラインシステムで、次のような機能を追加してもらう方が
将来的にも得策と思います。
  
拡張子が「xls」ということは、97-2003バージョン対応のファイルです。
ともすれば、最新バージョンに対応したほうがよいと思います。
  
ツ追加する機能
「ファイルと保存するか」問合せ
保存するフォルダを選択させる。
名前をつけて保存する
  
という数行程度のコードで対応できると思います。
 
システム担当者に相談してみるとよいです。
 
 
なお、ローカルで作成したシステムを起動する手間と
コピーを保存する手間は、
ほとんど差がないと思います。
 
それより、システム側でファイル名を変更するようなことがあれば、
ローカルシステムと整合しなくなります。

回答
投稿日時: 22/06/25 08:50:30
投稿者: WinArrow
投稿者のウェブサイトに移動

WEBで公開している市の統計資料(Excel)で開いて
GetObject
を実行してみました。
WEBなので、EDGEの1タブとして開いているので、
GetObjectでは、取得できませんでした。
 
オンラインシステムの環境も調査したほうがよいですね・・・・

投稿日時: 22/06/25 22:08:57
投稿者: Yaima

WinArrowさん ありがとうございます。
hatenaさん ありがとうございます。
 
改めて確認したところ、オンラインシステムが管理するフォルダーにXLS形式(マクロ含む)が
保存されており、オンラインシステムからのExcel出力は、オンラインシステムから出力した
csvファイルをあらかじめ保存してあるExcelファイルに展開するものでした。
 
xls形式のファイルの所在が判明したので、
Set xlApp = GetObject("Book2").Application
の構文でオンラインシステムからのExcelファイルのデータを取得し、
別のブックに張り付けることで、目的の処理を実現することができました。
 
以上で、この質問は解決とさせていただきます。
 
適切かつ迅速なアドバイスをありがとうございました。