プロが教える店舗&オフィスのセキュリティ対策術

エクセル97でのVBAについてですが
AというブックのデータをBというブックにコピーする時にシート名をブックAのA1の文字を使用しているのですが

この時にコピーした場合にシート名がいままで使用したことのない文字の場合にはうまくいくのですが、スデに取得しているシート名の場合に実行時エラーが出てしまいます

 出来ればスデに取得しているシート名の場合にはそのシートに上書きして、いままで取得していない場合には
新規にシートを新たにつくってそこにデータをコピーできるようなコードがわからなくて困っています
だれかたすけて下さい

A 回答 (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
    • good
    • 0

シートに上書きはできません。


なので、すでにシート名がある場合は、先にそのシートを削除し、シートを追加することになります。

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

で、いかがでしょうか?
    • good
    • 0

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