![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
いつもお世話になります。
WINDOWS7 EXCELL2010 です。
下記のマクロで例えば、
「1018」というシートが既に存在していて新たに「1018」を作成しようとした時に重複の注意喚起メッセ―ジを出すには下記のマクロにどうすればいいか御指導いただけませんでしょうか。
注意喚起メッセージは 「既に、同名のシートがあり再度入力して下さい。」
※If MsgBox("既に、同名の シートがあり再度入力して下さい。")
参考に
Private Sub CommandButton1_Click()
Dim NewSheetName As String
NewSheetName = InputBox("一桁の月及び日でも二桁のMMDD形式で新しいシート名を入力してください。例 0101")
Sheets("元本").Copy After:=Sheets("元本")
With ActiveSheet
.Name = NewSheetName
With .Range("A1")
.NumberFormatLocal = "0000"
.Value = NewSheetName
End With
.OLEObjects("CommandButton1").Delete
.Range("A2").Select
End With
Sheets("元本").Activate
Application.ScreenUpdating = True
End Sub
No.3ベストアンサー
- 回答日時:
> ご回答いただいたのをそのまま反映したものが下記の 「1」 ですがテストしたところシートのコピーなど何も反応しませんでした。
回答は、同一シート名に対し注意喚起し再入力を求めるという部分のコードですから、回答1の最後に「以下に新規作成のコード 」と記載しているように、質問のSheets("元本").Copy After:=Sheets("元本")以下のコードをそのまま記載してください。
> 私なりにご回答を編集追加したところ、
> シートはコピーされ 同名のシート名は「既に、同名の シートがあり再度入力して下さい。」
> までは上手くできました。
> ただしその後は下記のようなコーションが出ました。
> 解決策を再度ご指導いただけませんでしょうか。
一番大事なdo~Loopを取り除いてますから、同じシート名を見つけてもその旨表示するだけで再度入力をさせるようになっていません。その為に、重複するシート名のまま先に進み名前変更しようとしてますから当然「同じシート名で変更しようとしている」というエラーになります。
No.2
- 回答日時:
No1の一部追加です
同じシート名が見つかってもさらに探していたので見つかった時点でループを抜けるようにExit For追加しました。
For Each c In Worksheets
If c.Name = NewSheetName Then
MatchFLG = True
MsgBox ("既に、同名の シートがあり再度入力して下さい。"), vbExclamation
Exit For '←ここに追加
End If
Next
あと、質問のコードではMMDD以外の入力を規制していませんが、参考なので割愛しているのでなければ以下のページを参考に規制してみてはいかがでしょう。
http://atamoco.boy.jp/vba/lang/date.time/IsDate. …
この回答への補足
ご回答いただいたのをそのまま反映したものが下記の 「1」 ですがテストしたところシートのコピーなど何も反応しませんでした。
それ故にご回答に対して失礼かと思いつつも 2 のように勝手に変更させて戴きました。
2 の不具合の解決も含めて再度ご指導いただけたら幸甚の至りです。
1
Private Sub CommandButton1_Click()
Dim NewSheetName As String
Dim c As Object
Dim MatchFLG As Boolean
Do
MatchFLG = False
NewSheetName = InputBox("一桁の月及び日でも二桁のMMDD形式で新しいシート名を入力してください。例 0101")
If StrPtr(NewSheetName) = 0 Then
MsgBox "キャンセルします", vbInformation
Exit Sub
ElseIf NewSheetName = "" Then
MsgBox "未入力です", vbExclamation
Exit Sub
End If
For Each c In Worksheets
If c.Name = NewSheetName Then
MatchFLG = True
MsgBox ("既に、同名の シートがあり再度入力して下さい。"), vbExclamation
Exit For
End If
Next
Loop Until MatchFLG = False
End Sub
2
私なりにご回答を編集追加したところ、
シートはコピーされ 同名のシート名は「既に、同名の シートがあり再度入力して下さい。」
までは上手くできました。
ただしその後は下記のようなコーションが出ました。
解決策を再度ご指導いただけませんでしょうか。
「実行時エラー’1004’
シートの名前をほかのシート、Visual Basic で参照されるオブジェクト ライブラリまたはワークシートと同じ名前に変更することはできません。」
デバックで 「.Name = NewSheetName」 黄色で反転しています。
Private Sub CommandButton1_Click()
'2014/10/15 YOKOHAMA CHABIN
Dim NewSheetName As String
NewSheetName = InputBox("一桁の月及び日でも二桁のMMDD形式で新しいシート名を入力してください。例 0101")
If StrPtr(NewSheetName) = 0 Then
MsgBox "キャンセルします", vbInformation
Exit Sub
ElseIf NewSheetName = "" Then
MsgBox "未入力です", vbExclamation
Exit Sub
End If
For Each c In Worksheets
If c.Name = NewSheetName Then
MatchFLG = True
MsgBox ("既に、同名の シートがあり再度入力して下さい。"), vbExclamation
Exit For
End If
Next
Sheets("元本").Copy After:=Sheets("元本")
With ActiveSheet
.Name = NewSheetName
With .Range("A1")
.NumberFormatLocal = "0000"
.Value = NewSheetName
End With
.OLEObjects("CommandButton1").Delete
.Range("A2").Select
End With
Sheets("元本").Activate
Application.ScreenUpdating = True
End Sub
No.1
- 回答日時:
以下のような感じでいかがでよう。
未入力とキャンセルでは処理を中断します。Dim NewSheetName As String
Dim c As Object
Dim MatchFLG As Boolean
Do
MatchFLG = False
NewSheetName = InputBox("一桁の月及び日でも二桁のMMDD形式で新しいシート名を入力してください。例 0101")
If StrPtr(NewSheetName) = 0 Then
MsgBox "キャンセルします", vbInformation
Exit Sub
ElseIf NewSheetName = "" Then
MsgBox "未入力です", vbExclamation
Exit Sub
End If
For Each c In Worksheets
If c.Name = NewSheetName Then
MatchFLG = True
MsgBox ("既に、同名の シートがあり再度入力して下さい。"), vbExclamation
End If
Next
Loop Until MatchFLG = False
以下に新規作成のコード
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで金銭出納帳。繰越残高を...
-
前の(左隣の)シートを連続参...
-
Excelで同じシートのコピーを一...
-
エクセルの複数シートの保護を...
-
EXCEL:同じセルへどんどん足し...
-
VBAでシートコピー後、シート名...
-
エクセルでファイルを開いたと...
-
特定のシートの削除を禁止した...
-
エクセルで前シートを参照して...
-
エクセルVBAでパスの¥マークに...
-
複数のピボットを同じフィルタ...
-
excelでシート毎の最終更新日を...
-
EXCELで1ヶ月分の連続した日付...
-
Excelのシートを、まとめて表示...
-
存在しないシートの参照について
-
エクセルの再計算の順番について
-
テキストボックス内の文字の一...
-
エクセルでファイル保存時に複...
-
エクセルで毎回1枚目のシートを...
-
エクセル計算式解説
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで同じシートのコピーを一...
-
エクセルの複数シートの保護を...
-
エクセルVBAでパスの¥マークに...
-
EXCEL:同じセルへどんどん足し...
-
VBAでシートコピー後、シート名...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
EXCELで1ヶ月分の連続した日付...
-
エクセルで前のシートを連続参...
-
前の(左隣の)シートを連続参...
-
Excel、同じフォルダ内のExcel...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルで前シートを参照して...
-
複数シートの特定の位置に連番...
-
Accessのスプレッドシートエク...
-
シートの保護のあとセルの列、...
-
EXCELで同一フォーマットのシー...
-
特定のシートの削除を禁止した...
-
Excelのシートを、まとめて表示...
-
エクセルで複数設定したハイパーリンク先...
おすすめ情報