プロが教える店舗&オフィスのセキュリティ対策術

目にとめていただき有難うございます。
VBについては初心者です。宜しくお願い致します。

VB6.0で、フォーム上で指定した2つのExcelファイルについて、それぞれ特定の行・列を削除してCSVとして保存、そのデータを使って処理を行うプログラムを作成しようとしています。
同じVB6.0のプログラム上で、複数のExcelファイルに対して編集をかけることは可能でしょうか。

プログラムの流れとしては

(1)エクセルオブジェクトの新しいインスタンスを作成
(2)エクセルファイル1を開き、特定行を削除する
(3)エクセルファイル1をCSVとして保存、閉じる
(4)オブジェクトを解放する

(5)エクセルオブジェクトの新しいインスタンスを作成
(6)エクセルファイル2を開き、特定行を削除する
(7)エクセルファイル2をCSVとして保存する
(8)オブジェクトを解放する

というものです。
(1)~(4)と(5)~(8)は同じSubプロシージャでファイルのパスだけ変えるようにしています。
(1)~(5)迄は素直に行くのですが、(6)の削除行を指定する段階で
‘Rows’メソッドは失敗しました’_Global’オブジェクト
と出てしまう状態です。
(1)~(4)は問題なく動き、ファイル1の編集もきちんと出来ているため、混乱しております。
同じコードでパスだけ変えてやろうという考えが無理な話なのか、コードの組み方が悪いのか…
質問で不明瞭点があれば説明させて頂きますのでご指摘下さい。
宜しくお願い致します。
#ソースまで出した方が良かったのでしょうか…

A 回答 (4件)

>Rows("1:9").Select


>Selection.Delete Shift:=xlUp

Rowsの前にオブジェクトが必要です。
Excel内では省略出来ますが、VB内では省略不可だと思います。
(1回目で動くのが不思議です(^^;)

xlApp.Rows("1:9").Select
xlApp.Selection.Delete Shift:=xlUp

又は、xlSheetを使っているなら

xlSheet.Rows("1:9").Select
xlApp.Selection.Delete Shift:=xlUp

これでどうでしょう?
    • good
    • 0
この回答へのお礼

venzou さま
早速のご回答ありがとうございます。
きちんと動作してくれました!
Excelのマクロ自動生成を参考にやっていたので、
基本的な所をわからないままやっておりました…

今後とも宜しくお願い致します。

お礼日時:2006/12/10 16:56

(標題の)VB6で起動するにしろ


Set xlApp = CreateObject("Excel.Application")
を実行した後は、エクセルVBAの世界で、エクセルVBAの質問ですね。
その際はエクセルの世界で処理を始めるのに比べ、オブジェクトの
指定に神経を使う必要があるように思う。
Set xlBook = xlApp.Workbooks.Open(FileName)を定義しているのだから、それなどを最大限に生かし、シートまで特定することが必要でしょう。エクセルではつい暗黙の了解(Defalt)に助けられてますが、
それが通用しなくなる場面が出てくることがあると思う。
>エクセルファイル2を開き
エクセルはつまるところシートへの操作です。そのシートが別ブックのシートの場合、同一ブックの別シートの場合があるわけですが、
1つめのSheet、2つめのシートについて、
http://okwave.jp/qa2588902.html
で私が書いている
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Workbooks("Book2.xls").Worksheets("4月")
Set sh2 = ActiveWorkbook.Worksheets("Sheet1")
sh1とsh2のように別にSh1、Sh2を別々に定義するか、Sh1を定義し、処理後にSh1を解消し、上記のSh2の右辺でSh1を再定義する必要があると思う。
そしてSheet、Range、Row、Column関係を指定する場合、そのコードの前部に、「Sh1.」か「Sh1.やSh2.」を必ずつけて記述しないと、正しく動かない場合があると思いますが。
    • good
    • 0
この回答へのお礼

imogasi さま
早速のご回答ありがとうございます。
お礼が遅くなりましてすみません。
あいまいな知識でプログラムを組んでいるもので、
Excelの機能に助けられておりました…

今後とも宜しくお願い致します。

お礼日時:2006/12/10 17:03

確認していません。

「_Global VBA」でGoogle検索しただけです

http://www.tek-tips.com/viewthread.cfm?qid=13092 …
http://www.smallstyle.com/20050124.html
    • good
    • 0
この回答へのお礼

himajin100000 さま

早速のご回答ありがとうございます。
お礼が遅くなりすみません。参考にさせて頂きます!

お礼日時:2006/12/10 16:48

>同じコードでパスだけ変えてやろうという考えが無理な話なのか、


可能だと思いますよ。

>#ソースまで出した方が良かったのでしょうか…
そうですね。
ソースがないと原因が特定できませんので、お願いします。

この回答への補足

venzou さま
早速のお返事ありがとうございます。
以下にソースの概略をお示し致します。
他のプロシージャでファイル名を"FileName"に格納、以下のプロシージャにて編集を行います。

----------------ここから-----------------
Sub editFile()
'FileName 編集対象のExcelファイル名
'FileNameC CSVとして書き出すファイル名

Dim xlApp As Object 'Excel.Application
Dim xlBook As Object 'Excel.Workbook
Dim xlSheet As Object 'Excel.Worksheet

' エクセルオブジェクトの新しいインスタンスを作成
Set xlApp = CreateObject("Excel.Application")
' ファイル名を指定してワークブックを開く
Set xlBook = xlApp.Workbooks.Open(FileName)

' エクセルを表示
xl.Visible = True

  '特定行を削除する
Rows("1:9").Select
Selection.Delete Shift:=xlUp

  '他もろもろの作業を実施..........

ChDir Dir1.Path  '保存先のパスを指定しています
xlBook.SaveAs FileNameC
xlBook.Close

' Excel を終了
xlApp.Quit

' オブジェクトを解放
Set xlBook = Nothing
Set xlApp = Nothing
End Sub

----------------ここまで-----------------

以上、宜しくお願い致します。

補足日時:2006/12/09 18:06
    • good
    • 0
この回答へのお礼

すみません、補足漏れがありましたのでこちらに書かせて下さい。

 '特定行を削除する
Rows("1:9").Select

2つめのファイルを編集中、ここで‘Rows’メソッドは失敗しました’_Global’オブジェクト というエラーが出てきます。
宜しくお願い致します。

お礼日時:2006/12/09 18:21

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