[リストへもどる]
一括表示

投稿時間:2003/09/16(Tue) 15:16
投稿者名:RUN
Eメール:
URL :
タイトル:
Excelシートのコピーについて
テンプレートファイルのシートを、別xlsファイルのシートへコピーしたいんですが、

Dim aaa As Excel.Worksheet
Dim bbb As Excel.Worksheet

bbb.Copy Before:=aaa

上記コードにて処理を行い、たとえば、bbbのSheet1をaaaのSheet1にコピーするとします。
この処理だと、コピー先のaaaではSheet1が存在しているのに、Sheet1にコピーするのでは
なく、Sheet1(2)というシートを新規に作成してそのシートにコピーされてしまいます。

そうではなく、既にSheet1がある場合、そのシートにコピーをさせたいのですが、
この場合どのようにすれば良いのでしょうか?

投稿時間:2003/09/16(Tue) 15:34
投稿者名:tak
Eメール:
URL :
タイトル:
Re: Excelシートのコピーについて
「aaa」と「bbb」を「Worksheet」オブジェクト型で宣言されていますが、そこは
「Workbook」オブジェクト型で宣言すべきなのでは。
下記のような感じにして「flg」で処理を判断すればよいのでは?
見当違いならすみません。

Dim ws  As Excel.Worksheet
Dim flg As Boolean

flg = False
For Each ws In bbb
  If ws.Name = "Sheet1" Then
    flg = True
  End If
Next
Set ws = Nothing

投稿時間:2003/09/16(Tue) 16:25
投稿者名:RUN
Eメール:
URL :
タイトル:
Re^2: Excelシートのコピーについて
ありがとうございます。
実際は下記のようなコードになっています。

Dim app  As Excel.Application
Dim work1       As Excel.Workbook      
Dim work2   As Excel.Workbook
Dim sheet1 As Excel.Worksheet
Dim sheet2   As Excel.Worksheet

Set app = CreateObject("Excel.Application")
Set work1= app.Workbooks.Open("C:\template.xlt")
Set work2 = app.Workbooks.Open("C:\copyfile.xls")
Set sheet1 = work1.Worksheets("Sheet1")
Set sheet2 = work2.Worksheets("Sheet1")
    
sheet1.Copy Before:=sheet2

コピーはシートからシートをパラメータとして指定するのではないのでしょうか?
ただ、このままだとコピー先のcopyfile.xlsではSheet1が既に存在しているのに、
既に存在しているSheet1にはコピーされず、Sheet1(2)というシートを新規作成して
そこにコピーされてしまいます。
テンプレートの中身を毎回、xlsファイルのシートへコピーさせたいというのが処理したい
ことです。
上記だと、テンプレートのSheet1の内容をxlsのSheet1へコピーというように。

それで、コピーする前に、Sheet1を削除して、そのあとコピーすればSheet1を新規作成して
くれるのかと思ったのですが、作成されずにsheet1.Copy Before:=sheet2の処理のところで
エラーが出てしまいました。

すみません。もしわかればよろしくお願いいたします。

投稿時間:2003/09/16(Tue) 16:49
投稿者名:tak
Eメール:
URL :
タイトル:
Re^3: Excelシートのコピーについて
> Dim app  As Excel.Application
> Dim work1       As Excel.Workbook      
> Dim work2   As Excel.Workbook
> Dim sheet1 As Excel.Worksheet
> Dim sheet2   As Excel.Worksheet
>
> Set app = CreateObject("Excel.Application")
> Set work1= app.Workbooks.Open("C:\template.xlt")
> Set work2 = app.Workbooks.Open("C:\copyfile.xls")
> Set sheet1 = work1.Worksheets("Sheet1")
> Set sheet2 = work2.Worksheets("Sheet1")
>    
> sheet1.Copy Before:=sheet2
>
>それで、コピーする前に、Sheet1を削除して、そのあとコピーすればSheet1を新規作成して
>くれるのかと思ったのですが、作成されずにsheet1.Copy Before:=sheet2の処理のところで
>エラーが出てしまいました。
ちょっと気になったのですが、「Sheet1を削除して」の「Sheet1」があるWorkbookは「Sheet1」
以外にもWorksheetは存在していますか?Workbook上にWorksheetがひとつしかない状態で
削除しようとするとエラーになります。

もし、そうなら
1.コピー先にNameプロパティが「Sheet1」というものがあるかチェック。
2.あればコピー後は「Sheet1(2)」になりますし、なければ「Sheet1」でコピーできます。
3.2で、「Sheet1(2)」になっているなら削除時の警告を出さないようにして、
「Sheet1」を削除し、「Sheet1(2)」をリネームする。
この仕様で可能なはずですよ。

投稿時間:2003/09/16(Tue) 18:11
投稿者名:RUN
Eメール:
URL :
タイトル:
Re^4: Excelシートのコピーについて
ありがとうございます。
コピー先のExcelにはファイル作成時に作られるSheet1、Sheet2、Sheet3の3つがあります。
それで、コピー先のSheet1の名前を変更して、帳票1というシートにしてみました。
つまりこれで、
コピー元は Sheet1 Sheet2 Sheet3 の3種類のシート
コピー先は 帳票1 Sheet2 Sheet3  の3種類のシートがあることになります。
コードも下記のように変更しました。 

Dim app  As Excel.Application
Dim work1       As Excel.Workbook      
Dim work2   As Excel.Workbook
Dim sheet1 As Excel.Worksheet
Dim sheet2   As Excel.Worksheet

Set app = CreateObject("Excel.Application")
Set work1= app.Workbooks.Open("C:\template.xlt") 'コピー元Excelファイル
Set work2 = app.Workbooks.Open("C:\copyfile.xls") 'コピー先Excelファイル
Set sheet1 = work1.Worksheets("Sheet1")
Set sheet2 = work2.Worksheets("帳票1")
    
sheet1.Copy Before:=sheet2

コピー元ExcelファイルのSheet1の内容をコピー先Excelファイルの帳票1のシートへ
コピーしようとしたのです。
しかし、これを実行したら、コピー先ではSheet1が新規に作成され、その新規作成された
シートにコピーされてしまいました
こちらの設定の仕方に問題あるのでしょうか・・・

ご指摘いただいた点ですが、削除はうまくいっています
削除後のコピーでエラーが発生してしまいます。

何度もすみません
よろしくお願いいたします。

投稿時間:2003/09/16(Tue) 18:20
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^5: Excelシートのコピーについて
> sheet1.Copy Before:=sheet2
>
> コピー元ExcelファイルのSheet1の内容をコピー先Excelファイルの帳票1のシートへ
> コピーしようとしたのです。
> しかし、これを実行したら、コピー先ではSheet1が新規に作成され、その新規作成された
> シートにコピーされてしまいました
> こちらの設定の仕方に問題あるのでしょうか・・・

正常な動作です。
そもそもこのCopyメソッドはsheet1をsheet2の前にコピー(挿入)するので。

> ご指摘いただいた点ですが、削除はうまくいっています
> 削除後のコピーでエラーが発生してしまいます。

sheet2を削除しているのならコピーのところでエラーが出て当然です。
Beforeの対象になっているsheet2自体が存在しないので。

    sheet1.Copy Before:=work2.Worksheets("Sheet2")

とすれば一応コピーできるはずです(未確認)。
コピー後、シート名を変更してください。

投稿時間:2003/09/16(Tue) 18:46
投稿者名:RUN
Eメール:
URL :
タイトル:
Re^6: Excelシートのコピーについて
ありがとうございました。
Copyメソッドはそういう処理だったのですね。
シート名の指定によるコピーができたら便利だと思うのですが、そういうのはないようですね。

takさん、nanashiさん指摘いただいた通りコピー後に名前を変更するやり方にて
実現することができました。

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