« 指定したシートがあるか確認してからそのシートを削除する | トップページ | シート挿入あれこれ 2 »

2010年3月14日 (日)

シート挿入あれこれ

シートを名前を付けて挿入するには

Sheets.Add.Name = "シートの名前"

とします。

このとき、同名のシートが存在したら
次のようなエラーになります。
Vba20100314a

このエラーを避けるために
指定した名前のシートが存在するか確かめます。
で、もし同じ名前のシートがあった場合、
どうするか?ですが、

1.既存シートを削除した上で、新たに同名のシートを挿入する。
2.既存シートの全セルを削除して、新たにシートを挿入しない。
3.既存シートの名前を変更して残し、新たにシートを挿入する。
4.既存シートをそのまま残し、
  新たに挿入するシートの名前に番号を付けていく。

といった方法が考えられると思います。
順番にやっていきたいと思います。

まず、
1.既存シートを削除した上で、新たに同名のシートを挿入する。
についてです。

For Each...Next ステートメントですべてのシートの名前を調べていき
指定した名前と同じシートが在れば、削除します。
なければ何もしません。
同名のシートが在ってもなくてもプロシージャの最後で
shnameで指定した名前のシートを削除します。

コードはこちら

同名のシートがあれば削除して新たに挿入するコード:

Sub macro100314a()
'SheetAddDelの使用例
    SheetAddDel ("macro100314a")
End Sub

Sub SheetAddDel(shname As String)
'現在のWorkbookに同名のSheetがないか確認する。
'あれば、そのSheetを削除する。
'それから、新しいSheetを挿入する
   
    Dim sh As Object
   
    For Each sh In Worksheets
        If sh.Name = shname Then
            Application.DisplayAlerts = False
            sh.Delete
            Application.DisplayAlerts = True
        End If
    Next sh
   
    Sheets.Add.Name = shname

End Sub

次に、
2.既存シートの全セルを削除して、新たにシートを挿入しない。
についてです。

1.のコードを少し変えただけです。

同名のシートがあった場合、
1.のコードではシートを削除しているところを
シートの全セルを削除するに変更して、
プロシージャを終える。

同名のシートがなければ、単純にシートを挿入するだけです。

コードはこちら

同名のシートがあればセルを削除して新たに挿入しない コード:

Sub macro100314b()
'SheetAddCDelの使用例
    SheetAddCDel ("macro100314b")
End Sub

Sub SheetAddCDel(shname As String)
'現在のWorkbookに同名のSheetがないか確認する。
'あれば、そのSheetの全セルを削除する。
'それから、新しいSheetを挿入する
   
    Dim sh As Object
   
    For Each sh In Worksheets
        If sh.Name = shname Then
            Application.DisplayAlerts = False
            sh.Cells.Delete
            Application.DisplayAlerts = True
            Exit Sub
        End If
    Next sh
   
    Sheets.Add.Name = shname

End Sub

つづく

|

« 指定したシートがあるか確認してからそのシートを削除する | トップページ | シート挿入あれこれ 2 »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: シート挿入あれこれ:

« 指定したシートがあるか確認してからそのシートを削除する | トップページ | シート挿入あれこれ 2 »