エクセルマクロの質問です。エクセルのヴァージョンは2000です。
シートをコピーして新シートに任意の名前を付けるマクロを作っています。
ユーザーフォームの中に一つのテキストボックス(新シートの名前入力用)と
二つのコマンドボタンを設置し一つは実行ボタン、もう一つはキャンセルボタンとしました。
テキストボックスに不正な名前(空白、記号、すでに存在するシート名)が入力された状態で
実行ボタンを押すと新シートは作成されず、メッセージボックスで実行できない旨が表示され、
入力フォームに戻るという感じにしようと思っています。
エラー処理には下記の通りOn Errorステートメントを試してみました。が、どうもうまくいきません。
エラーが出ても新しいシートが作成されてしまい、その後にメッセージボックスが出てしまいます。
正しいエラー処理の仕方をご教示頂けると幸いです。どうぞよろしくお願いします。
Private Sub CommandButton1_Click()
Dim NewSheetName As String
NewSheetName = TextBox1.Value
On Error GoTo Err1
Sheets("Summary").Select
Sheets("Summary").Copy After:=Sheets("Summary")
ActiveSheet.Name = NewSheetName
Exit Sub
Err1: MsgBox "Invalid name"
Exit Sub
End Sub
No.3ベストアンサー
- 回答日時:
最初にシート名のチェックをするようにしました。
試してみて
Sub test()
Dim NewSheetName As String
'NewSheetName = TextBox1.Value
NewSheetName = "12/15"
NewSheetName = "12-15"
On Error Resume Next
Sheets("Summary").Name = NewSheetName
If Err.Number = 0 Then
Sheets(NewSheetName).Copy before:=Sheets(NewSheetName)
ActiveSheet.Name = "Summary"
Else
MsgBox "Invalid name"
End If
On Error GoTo 0
End Sub
'NewSheetName = TextBox1.Value
NewSheetName = "12/15"
NewSheetName = "12-15"
の部分は
NewSheetName = TextBox1.Value
に置き換えて試してみました。
元のページの名前を変えて、新しいページから元ページを作り直す・・・逆転の発想ですね。コードもシンプルな上に処理速度も速く、驚いています。
どうもありがとうございました。
No.2
- 回答日時:
あえて、Err1:があるので、それを残す方法としては、以下のようなコードはどうでしょう。
昔、私が考えたコードです。あえて、On Error GoTo Err1 を生かしたコードですから、必ずしも、エラートラップが必要なわけではありません。Private Sub CommandButton1_Click()
Dim NewSheetName As String
Const vbMyError As Integer = 513
On Error GoTo Err1
Worksheets("Summary").Select
NewSheetName = TextBox1.Value
If IsSheetName(NewSheetName) = False Then
Err.Raise vbMyError
End If
Worksheets("Summary").Copy After:=Worksheets("Summary")
ActiveSheet.Name = NewSheetName
Exit Sub
Err1:
If Err.Number = vbMyError Then
MsgBox "Invalid name"
TextBox1.Text = ""
End If
End Sub
Private Function IsSheetName(ShName As String) As Boolean
'シート名のエラーチェック
Dim v As Variant
Dim i As Integer
Dim sh As Object
'文字列の長さの制限
If Len(ShName) > 31 Or Len(Trim(ShName)) < 1 Then IsSheetName = False: Exit Function
'使用出来ない文字の検出
For Each v In Array(":", "\", "/", "?", "*", "(", ")")
i = InStr(1, ShName, v, vbBinaryCompare)
If i > 0 Then IsSheetName = False: Exit Function
Next v
For Each sh In ActiveWorkbook.Sheets
If StrComp(sh.Name, ShName, vbTextCompare) = 0 Then IsSheetName = False: Exit Function
Next sh
IsSheetName = True
End Function
No.1
- 回答日時:
Sheets("Summary").Copy After:=Sheets("Summary")
ここでコピーしたが、エラーではない。新しいシートはコピーされる。
ActiveSheet.Name = NewSheetName
ここでエラーになる。だからコピーされたシートはそのまま残る。
ではどうするかと言えば、例えば、エラーに成ったときコピーされたシートを削除する。ついでにシートの削除で文句を言われないおまじないもいれておく。
Err1: MsgBox "Invalid name"
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
Exit Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelはなんで先頭の0を消すん...
-
Excel元に戻す方法を教えてくだ...
-
Excelが固まってしまった。
-
エクセルで特定の範囲内から小...
-
Excel 2019 のピボットテーブル...
-
テレビを購入してYouTubeのボタ...
-
Excel2013のF6キー操作について
-
西暦や和暦の表示をyyyymmdd表...
-
【関数】スペースがいくつ入っ...
-
【Microsoft Office Excel Comp...
-
Excelのオートフィル
-
別シートからの文字を変更
-
Excelのセルを飛ばして入力する
-
MOS365 Excel Expert / Excel R...
-
エクセルで指定した日付、店舗...
-
4つのパターンを表示するEXACT...
-
スマートな関数を教えて下さい。
-
【Excel】セル内の時間帯が特定...
-
Excel初心者です。 詳しい方、...
-
Excelで全角を半角にしたいので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】sheet作成時にマク...
-
エクセル/マクロ Exit Subが実...
-
VBA シートの切り替えができな...
-
エクセル 「実行時エラー"13":...
-
マクロ実行ボタンがコピー出来ない
-
VBAでシートコピー後、シート名...
-
エクセル 複数シートのフィル...
-
シートの表示が消えて整列をし...
-
フェイス・シートについて教え...
-
エクセルのワークシートの並べ替え
-
Excelユーザーフォームでシート...
-
Excel2000でシート上にボタンを...
-
【エクセル】複数の文字を同時...
-
アクセス97での罫線について
-
エクセルのシートを自動でコピー
-
ワークシート上に配置したコマ...
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
WordPressをインストールしてい...
-
オペランドが足りませんとコメ...
おすすめ情報