目にとめていただき有難うございます。
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の編集もきちんと出来ているため、混乱しております。
同じコードでパスだけ変えてやろうという考えが無理な話なのか、コードの組み方が悪いのか…
質問で不明瞭点があれば説明させて頂きますのでご指摘下さい。
宜しくお願い致します。
#ソースまで出した方が良かったのでしょうか…
No.3ベストアンサー
- 回答日時:
>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
これでどうでしょう?
venzou さま
早速のご回答ありがとうございます。
きちんと動作してくれました!
Excelのマクロ自動生成を参考にやっていたので、
基本的な所をわからないままやっておりました…
今後とも宜しくお願い致します。
No.4
- 回答日時:
(標題の)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の機能に助けられておりました…
今後とも宜しくお願い致します。
No.2
- 回答日時:
確認していません。
「_Global VBA」でGoogle検索しただけですhttp://www.tek-tips.com/viewthread.cfm?qid=13092 …
http://www.smallstyle.com/20050124.html
No.1
- 回答日時:
>同じコードでパスだけ変えてやろうという考えが無理な話なのか、
可能だと思いますよ。
>#ソースまで出した方が良かったのでしょうか…
そうですね。
ソースがないと原因が特定できませんので、お願いします。
この回答への補足
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
----------------ここまで-----------------
以上、宜しくお願い致します。
すみません、補足漏れがありましたのでこちらに書かせて下さい。
'特定行を削除する
Rows("1:9").Select
2つめのファイルを編集中、ここで‘Rows’メソッドは失敗しました’_Global’オブジェクト というエラーが出てきます。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
現在アクティブになっているオ...
-
日本語の文字化けを直す方法
-
エクセルのデータをwebフォーム...
-
Excel VBAでマウスの左クリック...
-
「SHDocVw」の意味
-
【エクセル】複数のTextBoxに共...
-
コードでオブジェクトを最前面に
-
文字列で小数点以下の0を削除し...
-
VBA エンターキーでイベントに...
-
Imageコントロールにグラフを表...
-
Excel VBA でPictureBoxオブジ...
-
Excel 終了マクロ
-
<OBJECT>タグからJavascript呼...
-
構造体の静的な初期化
-
WSH or VBの質問
-
Excel2007 でのチェックボック...
-
カッコ付けのオブジェクト名を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
Excel2007 でのチェックボック...
-
文字列で小数点以下の0を削除し...
-
日本語の文字化けを直す方法
-
Excel VBAでマウスの左クリック...
-
エクセルのデータをwebフォーム...
-
Access からオブジェクトとして...
-
コードでオブジェクトを最前面に
-
Accessのフォーム上にエクセル...
-
構造体の静的な初期化
-
【エクセル】複数のTextBoxに共...
-
ユーザーフォームのインポート...
-
PowerpointVBAで指定のShapeオ...
-
現在アクティブになっているオ...
-
[C#] DataGridViewの項目名
-
Excel VBA でPictureBoxオブジ...
-
Excelを閉じるときVBAプロジェ...
おすすめ情報