人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

UWSCを使って以下のコードを書きました。

EXCEL = GETACTIVEOLEOBJ("Excel.Application","Microsoft Excel - abc.xls")

というコードです。処理内容はA列のデータをB列に1行ずつコピーしていくという処理です。

1.abc.xlsを起動。
2.A列にデータを記入。
3.UWSC実行。
4.B列にデータをコピー
この処理は問題なく行うことができます。

ただ、複数のExcelを起動している場合。例えばxyz.xls、Book1.xlsなどのExcelが起動していたら、Book1.xlsを選択した時、Book1.xlsにA列の値がB列にコピーされてしまうという現象がおこってしまいます。

ヘルプを見ると、
戻値 = GETACTIVEOLEOBJ( COMオブジェクト名, [タイトル, 順番] )
引数
COMオブジェクト名: COMオブジェクト名
タイトル: 複数時にタイトルで区別(一部でOK)
順番: IEにてタイトルが同じ時に区別 ※IEのみ有効
戻値
COMオブジェクト

という内容が書かれています。GETACTIVEOLEOBJにタイトルとして、abc.xlsを指定しているのに、なぜ複数のexcelを起動している時に、abc.xls以外のブックにデータが書かれてしまうのでしょうか?これを回避するには何か方法があるのでしょうか?

●質問者: akaired
●カテゴリ:コンピュータ
✍キーワード:ABC application Excel IE Microsoft
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● airplant
●60ポイント ベストアンサー

GETACTIVEOLEOBJでは、Excelファイル名に関係なく、Excelオブジェクトが取り出されているようです。

特定のExcelに対して操作するには、Excel内で指定してあげる必要があります。


UWSCのサンプルからコーディングされていると思いますので、今は多分下記のようなプログラムになっていると思います。

EXCEL = GETACTIVEOLEOBJ("Excel.Application","Microsoft Excel - abc.xls")

With EXCEL.ActiveSheet
for y = 1 to 5// A列をB列へコピーのサンプル
.Cells[y,2].Value = .Cells[y,1].Value
next
EndWith

このプログラムだと、現在のアクティブなExcelに対して操作することになるので、指摘のようにBook1.xlsやxyz.xlsでも動いてしまいます。


対処方法として、3つあると思います。

案1.裏にあるExcelに対してそのまま操作する方法

案2.裏にいたなら、無理に表にしてしまう方法

案3.動かさずにエラーにしてしまう方法

どれを行いたいのか分からなかったので、3つ載せておきました。

//案1.裏にあるExcelに対してそのまま操作
EXCEL = GETACTIVEOLEOBJ("Excel.Application")

Workbook = EXCEL.WorkBooks("abc.xls")

With WorkBook.WorkSheets[1]
for y = 1 to 5// A列をB列へコピーのサンプル
.Cells[y,2].Value = .Cells[y,1].Value
next
// .Range["B:B"].Value = .Range["A:A"].Value //全行ならこれでもOK
EndWith
//案2.裏にいたなら、無理に表にしてしまって処理
EXCEL = GETACTIVEOLEOBJ("Excel.Application")

EXCEL.WorkBooks("abc.xls").Activate
With EXCEL.ActiveSheet
for y = 1 to 5// A列をB列へコピーのサンプル
.Cells[y,2].Value = .Cells[y,1].Value
next
EndWith
//案3.動かさずにエラーにしてしまう
CONST FileName = "abc.xls"
EXCEL = GETACTIVEOLEOBJ("Excel.Application")

IFB EXCEL.ActiveWorkbook.Name <> FileName Then 
MsgBox(FileName + "ではありません")
EXIT
EndIF

With EXCEL.ActiveSheet
for y = 1 to 5// A列をB列へコピーのサンプル
.Cells[y,2].Value = .Cells[y,1].Value
next
EndWith

私もたまにUWSCを使います。

でも、今回の例のようにExcel主体であれば、UWSCよりWSHのほうが適しているような感じがします。

◎質問者からの返答

Uスクリプト:COM_Error:例外が発生しました。X行目:Workbook = EXCEL.WorkBooks("abc.xls")というメッセージが表示されて途中で止まってしまいます。変数を変えたりしましたが、これより先にすすめません。どうしたらよいでしょうか?EXCEL.WorkBooks.Open("abc.xls")でも同じメッセージが表示されました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ