いつもお世話になっております。
やりたいこと
ユーザフォームにテキストボックスとコマンドボタンが
設置してあります。
コマンドボタンを押すと
テキストボックスに入力されている日付の
名前で新規ワークシート作成して
その新規ワークシートのB3に日付を入力して
終了したいのですが、
以下のコードを実行すると20以上のワークシート
が作成されてしまいます。
わかる方おしえてくれませんでしょうか
On Error Resume Next
For Each wS In Worksheets
If wS.Name <> Format(TextBox1.Value, "yy年mm月dd日") Then
Worksheets.Add
ActiveSheet.Name = Format(TextBox1.Value, "yy年mm月dd日")
Range("B3").Value = Format(TextBox1.Value, "yy年mm月dd日")
End If
Next
No.3ベストアンサー
- 回答日時:
既に同じ名前のシート名があれば、メッセージボックスにその旨表示し、
同じ名前のシート名がない場合のみ、新規作成するようにしました。
Private Sub CommandButton1_Click()
Dim name As String
name = Format(TextBox1.Value, "yy年mm月dd日")
If NameExists(name) = False Then
Worksheets.Add
ActiveSheet.name = Format(TextBox1.Value, "yy年mm月dd日")
Range("B3").Value = Format(TextBox1.Value, "yy年mm月dd日")
Else
MsgBox (name & "は既に存在します")
End If
End Sub
Public Function NameExists(ByVal name As String) As Boolean
Dim ws As Worksheet
NameExists = True
For Each ws In Worksheets
If ws.name = name Then Exit Function
Next
NameExists = False
End Function
No.2
- 回答日時:
こんにちは
う~~ん・・・
シート名が存在するかをチェックしようとしているのだと思いますけれど、シート数分のループの中で
>Worksheets.Add
とやっているので、チェックに該当するシートが存在しないと、ループの数だけシートが作成されることになります。
その結果が、
>20以上のワークシートが作成されてしまいます。
ということでしょう。
また、ご提示の処理のままだと、仮に、同じシート名がすでに存在していても、「全シート数 - 1」の新規シートが作成されることになっています。
処理手順を以下のように考えてみてください。
1)ループで全部のシート名に該当する名がないことをチェック
2-1)存在しなければ、新規シートを作成
2-2)存在する場合は???(ご提示の処理には記述されていません)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
別のシートから値を取得するとき
-
【VBA】シート名に特定文字が入...
-
【ExcelVBA】全シートのセルの...
-
XL:BeforeDoubleClickが動かない
-
Excelマクロのエラーを解決した...
-
シートが保護されている状態で...
-
excelのマクロで該当処理できな...
-
ワークシートを追加したときの...
-
エクセルVBA Ifでシート名が合...
-
ユーザーフォームに入力したデ...
-
連結セル改行して別シートに転...
-
VBAで指定シート以外の選択
-
ExcelVBA:複数の特定のグラフ...
-
VBA 月ごとの表 当月までの累計
-
【Excel VBA】Worksheets().Act...
-
VBA 存在しないシートを選...
-
Excel VBA リンク先をシート...
-
同じ作業を複数のシートに実行...
-
別のシートを参照して計算する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
excelのマクロで該当処理できな...
-
別のシートから値を取得するとき
-
Excelマクロのエラーを解決した...
-
実行時エラー'1004': WorkSheet...
-
ブック名、シート名を他のモジ...
-
ExcelのVBAのマクロで他のシー...
-
VBAで指定シート以外の選択
-
VBA 存在しないシートを選...
-
エクセルのシート名変更で重複...
-
IFステートの中にWithステート...
-
シートが保護されている状態で...
-
【VBA】シート名に特定文字が入...
-
ExcelVBA:複数の特定のグラフ...
-
XL:BeforeDoubleClickが動かない
-
実行時エラー1004「Select メソ...
-
【VBA】色のついたシート名を取得
-
エクセル・マクロ シートの非...
おすすめ情報
頂きましたコードを実行すると
確かに一つだけ作成されます。
ありがとうございます。
しかし もう一度コマンドボタンをクリックすると
また、あらたに 新規作成されてしまいます。
そこで以下のようにやりましたが、
If TextBox1.Value <> "" Then
If IsDate(TextBox1.Value) = True Then
Worksheets.Add
ActiveSheet.Name = Format(TextBox1.Value, "yy年mm月dd日")
Range("B3").Value = Format(TextBox1.Value, "yy年mm月dd日")
End If
End If
TextBox1.Value = ""
これでもまた新規作成させます。
新規作成されないようにするにはどうしたらよいのかおしえてくれませんでしょうか