アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB6でExcelファイルを開いてシートをコピーし、新規ファイルとして保存したいのですが方法がわかりません。
(既存のExcelシートを雛形として新しくBookを作りたいんです)

Set objexcel = CreateObject ("Excel.Application")
Set objexcel_new = CreateObject("Excel.Application")

objexcel.Workbooks.open (App.Path & "\book1.xls")
objexcel_new.Workbooks.Add '新規に作る

'シートのコピー
objexcel.sheets("Sheet1").Copy
objexcel_new.sheets("Sheet1").Select
objexcel_new.activesheet.Paste

としても、実行前のクリップボードの中身が貼り付けられるだけで、シートがコピーできません。
よろしくお願いします。

A 回答 (6件)

一連の作業を記録マクロでやってみましたが。

。。

'ここでコピー

Sheets("Sheet3").Select
Sheets.Add

'ここでペースト

ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\xxxx\My Documents\Book1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False

ポイントは Sheets.Add と ActiveWorkbook.SaveAs の気がしますが・・・

この回答への補足

ご回答ありがとうございます。
実行前のクリップボードの中身が書き出され保存されているので、保存方法は間違いないと思いますが...
(オブジェクトのClose時にsavechanges:=Trueで保存しています)

Sheets.Addを使ってみましたが、シートが1つ追加されただけで結果は同じでした。

補足日時:2005/10/01 18:45
    • good
    • 0

こんにちは。

#3です。

ちょっと、振り返って読んでみたけれども、
>>No.3さんの上のコードってSheetは1つしか作成されませんでした?

>いえ、目的が違ったので試していません。

私のコードのどこが違うのか、回答のお礼の文章からは読み取れませんが、ロジックも分っているなら、もうできるでしょう。でも、ご質問で書いたオートメーション・オブジェクトについてあやふやなレベルで、とうてい、他人のコードを読んで分るとは思えませんが。

>・処理の内容に応じ、「a」か「b」かどちらかのSheetをコピーし、新しく「abc_new.xls」として保存する
分岐をつければよいのでは?その方法ならいくつかあるでしょう?

>別のBookの特定のSheetを取り込む方法を知りたいだけなんです。

一体、何をしたいのか私にはよく分りません。
    • good
    • 0
この回答へのお礼

お礼遅くなり申し訳ありません。
No.5でのお礼の通り、ロジックはわかるんです。
単にシートのコピーと貼り付けの方法を知りたいだけなんですが...

それとここは質問者のレベルを責めたりするんではなく、質問の回答をする場ではないでしょうか。

ちょっと気になりました。
ありがとうございました。

お礼日時:2005/10/07 23:45

>「abc_new.xls」には「a」か「b」かどちらかのSheetしか存在しない



No.3さんの上のコードってSheetは1つしか作成されませんでした?

もし3つできていたらSheets(Sheetでなくて)をループさせてSheet.Nameが"A"もしくは"B"以外であれば削除したらいいと思います。

>処理の内容に応じ、「a」か「b」かどちらかのSheetをコピーし、

単にSheetを選択する前に条件式を入れればいいだけじゃないでしょうか?
    • good
    • 0
この回答へのお礼

>No.3さんの上のコードってSheetは1つしか作成されませんでした?

いえ、目的が違ったので試していません。

>単にSheetを選択する前に条件式を入れればいいだけじゃないでしょうか?
そのことは問題ではないんです。
判定のロジックはわかっていてちゃんと組めています。

ただ、別のBookの特定のSheetを取り込む方法を知りたいだけなんです。

ありがとうございました。

お礼日時:2005/10/04 19:59

単純に1つのBookを開いてSaveAsで名前を付けて保存すればいいのではないでしょうしょうか

    • good
    • 0
この回答へのお礼

ありがとうございます。
それではだめなんです...

お礼日時:2005/10/02 20:15

こんばんは。


VB6 でするにしても、何か、とっても初歩的な話のようなのですが(^^;

以下は、SheetひとつだけのBookを作ります。
ただし、App.Path というのは、Excelとは関係がありませんので、使いませんでした。違うようでしたら、直してください。また、ブック名は、本来は変数で行ったほうがよいですね。

Private Sub Command1_Click()
Dim objExcel As Object
Dim myPath As String
Set objExcel = CreateObject("Excel.Application")
With objExcel
myPath = objExcel.DefaultFilePath &"\"
 .Workbooks.Open (myPath & "book1.xls")
'シートのコピー
 .Sheets("Sheet1").Copy
 .ActiveWorkbook.SaveAs "cpybbook1.xls"
 .Workbooks("book1.xls").Close False
 .Quit
End With
Set objExcel = Nothing
End Sub

こちらはペースト方式でもよいのですが、その場合は、
なんて、小技を使わないといけないような気がしますね。
ちょっと順序がおかしいかな?
「 .ActiveWorkbook.Sheets(1).Select」
なお、これを入れないと、選択しっぱなしのままになります。

 .Workbooks.Open (myPath & "\book1.xls")
'シートのコピー
 .Sheets("Sheet1").Cells.Copy
 .Workbooks.Add
 .ActiveWorkbook.Sheets(1).Range("A1").PasteSpecial
 .ActiveWorkbook.Sheets(1).Select
 .ActiveWorkbook.SaveAs "cp2book1.xls"
 .ActiveWorkbook.Close False
 .Workbooks("test.xls").Close False
 .Quit
End With
Set objExcel = Nothing
End Sub

この回答への補足

すみません、説明不足でした。
・「abc.xls」に「a」と「b」のSheetがある
・処理の内容に応じ、「a」か「b」かどちらかのSheetをコピーし、新しく「abc_new.xls」として保存する
・「abc_new.xls」には「a」か「b」かどちらかのSheetしか存在しない

こういったものを作りたいんです。
よろしくお願いします。

補足日時:2005/10/02 20:01
    • good
    • 0

ごめんなさい。

勘違いしていました。

そもそもSheetの他のBookへのコピーって可能なん
でしょうか?

Sheet丸ごとのコピーでなくて、中のセルだけの
コピーにすればOKでないのでしょうか?

Cells.Copyで全部選択して
ActiveSheet.Paste です。

この回答への補足

ご回答ありがとうございます。

>そもそもSheetの他のBookへのコピーって可能なん
>でしょうか?
以前やったことがあったような気がします。

セルのコピーだと列の幅などが反映されませんのでシートをごっそりコピーしたいんです。
よろしくお願いします。

補足日時:2005/10/01 21:31
    • good
    • 0

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