• 締切済み

VBAでのワークシートコピー制御について

エクセル97でのVBAについてですが AというブックのデータをBというブックにコピーする時にシート名をブックAのA1の文字を使用しているのですが この時にコピーした場合にシート名がいままで使用したことのない文字の場合にはうまくいくのですが、スデに取得しているシート名の場合に実行時エラーが出てしまいます  出来ればスデに取得しているシート名の場合にはそのシートに上書きして、いままで取得していない場合には 新規にシートを新たにつくってそこにデータをコピーできるようなコードがわからなくて困っています だれかたすけて下さい

みんなの回答

  • vbafriend
  • ベストアンサー率47% (17/36)
回答No.2

初めまして。サンプルマクロを組んでみました。参考にしてみて下さい。 もし、操作等ご不明な点がございましたらお知らせ下さい。ご説明させていただきます。 Sub Test Dim myCnt as integer Dim i as integer Dim myWsn as string myCnt = workbooks("コピー先ブック名.xls").worksheets.count for i = 1 to myCnt if workbooks("コピー先ブック名.xls").worksheets(i).name _ = workbooks("コピー元ブック名.xls").worksheets("シート名").range("A1").value then workbooks("コピー元ブック名.xls").worksheets("シート名").Cells.copy Destination:=Workbooks("コピー先ブック名.xls").worksheets("シート名").cells else Workbooks("コピー先ブック名.xls").worksheets.add after:=Workbooks("コピー先ブック名.xls").worksheets(Worksheets.Count) Activesheet.Name =workbooks("コピー元ブック名.xls").worksheets("シート名").range("A1").value workbooks("コピー元ブック名.xls").worksheets("シート名").Cells.copy Destination:=Workbooks("コピー先ブック名.xls").worksheets("シート名").cells end if end sub

  • uratan
  • ベストアンサー率30% (38/124)
回答No.1

シートに上書きはできません。 なので、すでにシート名がある場合は、先にそのシートを削除し、シートを追加することになります。 (1)Bブックにこれからコピーするシート名があるかチェックする。  Bブック内の全てのシート名をループによって見る。  ループカウントはWorksheets.Countでとれます。  シート名はプロパティ「name」でとれます。 (2)同じシート名があれば、Bブックにあるシートを削除。  「シート名.delete」で削除できます。  その際、DisplayAlertsはFalseにしてください。(削除確認MSGを出さない) (3)同じシート名がなければ、そのままコピーする。 で、いかがでしょうか?