OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

VBからExcelのシートを操作する

  • 困ってます
  • 質問No.238031
  • 閲覧数634
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 84% (27/32)

 VBからExcelを操作するのですが、
 たとえば、Book1のSheet1 を Book2のSheet1の後ろへ
 という形でシートをコピーしたいのですがうまくいきません。
 
 Sheet1,Sheet2を Excel.Worksheet 型で定義した変数へそれぞれ取得し、Sheet1のcopyメソッドを使って試しています。

 Sheet1.copy のみだと、新たなブックへきちんとコピーされるのですが、After:= Sheet2 をつけるとエラーが起きてしまいます。

 この方法で、また、他の方法でもうまくいく方法を御存知の方、何卒御教授のほどをお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル7

ベストアンサー率 88% (8/9)

遅くなりました!!

わたしが勘違いしていたようですね。
それにExcelオブジェクトの理解が浅はかだったようで、
ちょっと調べるのに時間がかかりました。

Dim EXObject As Object ''エクセルオブジェクト
Dim Book2 As Excel.Workbook
Dim Sheet2 As Excel.Worksheet

''EXCELオブジェクトの作成
Set EXObject = CreateObject("Excel.Application")
''EXCELのブック1を作成したオブジェクトの中に開く
EXObject.Workbooks.Open "D:\book1.xls"

''EXCELのブック2を作成したオブジェクトの中に開く
EXObject.Workbooks.Open "D:\book2.xls"

Set Book2 = EXObject.Workbooks("book2.xls")
Set Sheet2 = Book2.Sheets(1)

EXObject.Workbooks("Book1.xls").Sheets("Sheet1").Copy After:=Sheet2

''実際開いて確認
EXObject.Visible = True

これでどうでしょうか。
多分エラーが出るのは、GetObject("D:\book1.xls")で開くと、
エクセルのインスタンスが別に作成されてしまうからのような気がします。(多分)
これですと、一つのエクセルに、ブックを2枚開く形に
なりますので、コピーが可能です。

これじゃまずいでしょうか…。
また勘違いだったらごめんなさい。
お礼コメント
chupark

お礼率 84% (27/32)

またまた回答ありがとうございます。
試行錯誤の結果、実は自己解決していました。
質問の締め切りが遅れて申し訳ありません。

まさにfisさんのご指摘どおりだと思います。
GetObject でブックを開くのではなく、Openでブックを開いておくと
Copy After:=Workbook("ブック名").sheets(1) 
が使え、コピーがうまくできました。

ありがとうございました。
投稿日時 - 2002-03-21 17:29:22
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル7

ベストアンサー率 88% (8/9)

こんにちは! Sheets("Sheet1").Copy After:=Sheets(2) これでどうですか? どうやらAfterはシート名ではなく、シートの番号を指定するようですね。 Excelで困ったときは、一度Excel上で同じ状態を作り、 ツール→マクロ→新しいマクロの記録 を行い、実際にやってみるとわかりやすいです。 登録が終了したマクロは、 ...続きを読む
こんにちは!

Sheets("Sheet1").Copy After:=Sheets(2)

これでどうですか?
どうやらAfterはシート名ではなく、シートの番号を指定するようですね。

Excelで困ったときは、一度Excel上で同じ状態を作り、

ツール→マクロ→新しいマクロの記録

を行い、実際にやってみるとわかりやすいです。
登録が終了したマクロは、

ツール→マクロ→Visual Basic Editor

で確認できますよ^^
それでは、頑張って下さい!
お礼コメント
chupark

お礼率 84% (27/32)

 早速の回答ありがとうございます。
 
 実は私もマクロの記録を利用してソースを読み、参考にしています。
 便利ですよね。
 
 Sheet2 を取得するときに、
 dim Book2 as Excel.Workbook
dim Sheet2 as Excel.WorkSheet

set Book2 = GetObject("D:\book1.xls")
set Sheet2 = Book2.Sheets(1)

などと取得しているのですが、これで
Sheet1.Copy After:=Sheet2 
とやるとうまくいきませんでした。
 
エラーメッセージも "_WorkSheet"がどうのこうのと出ていたので、Sheet2の型か何かが悪いのだと思うのですが…。
 
 
投稿日時 - 2002-03-19 21:07:39


このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ