- ベストアンサー
VB6.0同一プログラム上で複数のExcelファイルの編集をしたいのですが…
目にとめていただき有難うございます。 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の編集もきちんと出来ているため、混乱しております。 同じコードでパスだけ変えてやろうという考えが無理な話なのか、コードの組み方が悪いのか… 質問で不明瞭点があれば説明させて頂きますのでご指摘下さい。 宜しくお願い致します。 #ソースまで出した方が良かったのでしょうか…
- みんなの回答 (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 これでどうでしょう?
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
(標題の)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.」を必ずつけて記述しないと、正しく動かない場合があると思いますが。
お礼
imogasi さま 早速のご回答ありがとうございます。 お礼が遅くなりましてすみません。 あいまいな知識でプログラムを組んでいるもので、 Excelの機能に助けられておりました… 今後とも宜しくお願い致します。
- himajin100000
- ベストアンサー率54% (1660/3060)
確認していません。「_Global VBA」でGoogle検索しただけです http://www.tek-tips.com/viewthread.cfm?qid=1309265&page=1 http://www.smallstyle.com/20050124.html
お礼
himajin100000 さま 早速のご回答ありがとうございます。 お礼が遅くなりすみません。参考にさせて頂きます!
- venzou
- ベストアンサー率71% (311/435)
>同じコードでパスだけ変えてやろうという考えが無理な話なのか、 可能だと思いますよ。 >#ソースまで出した方が良かったのでしょうか… そうですね。 ソースがないと原因が特定できませんので、お願いします。
お礼
すみません、補足漏れがありましたのでこちらに書かせて下さい。 '特定行を削除する Rows("1:9").Select 2つめのファイルを編集中、ここで‘Rows’メソッドは失敗しました’_Global’オブジェクト というエラーが出てきます。 宜しくお願い致します。
補足
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 ----------------ここまで----------------- 以上、宜しくお願い致します。
お礼
venzou さま 早速のご回答ありがとうございます。 きちんと動作してくれました! Excelのマクロ自動生成を参考にやっていたので、 基本的な所をわからないままやっておりました… 今後とも宜しくお願い致します。