
エクセルマクロの質問です。エクセルのヴァージョンは2000です。
あるシートをコピーして新シートに任意の名前を付けるマクロを作っています。ユーザーフォームの中に一つのテキストボックス(新シートの名前入力用)と二つのコマンドボタンを設置し一つは実行ボタン、もう一つはキャンセルボタンとしました。
QNo.6367227でエラー処理に関する質問をさせていただきましたが、こちらは見事に解決していただきました。
今回の質問はExit Subに関する質問です。
If構文で、条件文1が真であればシートをコピーして名前を変更、フォームを閉じるという処理を目指しています。
If 条件 Then ~ 処理 Exit Sub
という形を作って試してみたのですが、処理後にExit Subが実行されません。Exit Subの前にメッセージボックスを挿むとメッセージは表示されましたが、やはりExit Subにはたどり着けませんでした。
すごく初歩的な事で恥ずかしいのですが、Exit Subが実行されない理由と解決法をご教示いただけると助かります。よろしくお願いします。
Private Sub CommandButton1_Click()
Dim NewSheetName As String
NewSheetName = TextBox1.Value
On Error Resume Next
Sheets("Summary").Name = NewSheetName
If Err.Number = 0 Then
Sheets(NewSheetName).Copy before:=Sheets(NewSheetName)
ActiveSheet.Name = "Summary"
MsgBox ("Task Completed!")
ExitSub
Else
MsgBox "Invalid name!"
End If
On Error GoTo 0
End Sub
No.4ベストアンサー
- 回答日時:
こんな感じでどうでしょう。
Private Sub CommandButton1_Click()
Dim Ws As Worksheet
Set Ws = Worksheets("Summary")
On Error GoTo ErrorMessage
Ws.Name = TextBox1.Value
On Error GoTo 0
Ws.Name = "Summary"
Ws.Copy After:=Ws
ActiveSheet.Name = TextBox1.Value
MsgBox "Task Completed!"
Exit Sub
ErrorMessage:
MsgBox "Invalid name!"
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
CommandButton2はキャンセルボタンというより終了ボタンになります。
「Unload Me」でユーザーフォームを終了します。
CommandButton1でユーザーフォームを終了させてもよいのですが、シートを複数回コピーする場合を考えると、終了ボタンで終了させた方がよいと思います。
この回答への補足
CommandButton1でユーザーフォームを終了させる方法をお尋ねしたかったんです。Exit Sub をUnload Meに変更したら希望どおりに作動しました。
)CommandButton1でユーザーフォームを終了させてもよいのですが、シートを複数回コピーする場合を考えると、終了ボタンで終了させた方がよいと思います。
というのはなぜでしょうか?
解決の糸口になりました。Exit Sub とUnload Meを勘違いしていたようです。また一から勉強しなおしです。どうもありがとうございました。
No.5
- 回答日時:
>処理後にExit Subが実行されません
>やはりExit Subにはたどり着けませんでした。
提示のコードはまともに動作するコードです。
上記のように判断した理由はなんですか?
それをちゃんと提示しませう。
(Exit SubをExitSubと書いてあるのは単に転記ミスでしょうね)
●因みに提示のコードでは、Exit Subは不要です。
というよりない方がベターでしょう。
以上です。
この回答への補足
CommandButton1でユーザーフォームを終了させる方法をお尋ねしたかったんです。Exit Sub をUnload Meに変更したら希望どおりに作動しました。Exit SubとUnload Meを勘違いしていたようです。
補足日時:2010/12/08 14:41No.3
- 回答日時:
「エクセル/マクロ エラー処理がうまくいきません」
前回の回答者ですが、なぜ、私のコードが無視するほどのレベルでしょうか?
もう一度、私の前回のコードを確認してみてください。シート名の法則が書かれています。31文字までとか、使ってはいけない文字とか、同ブックに同じ名前はないこととか、網羅されています。こういうことは基本的なことだと思います。
本来は、シート名をコピーしてシート名を変えれば、後は、MsgBox を出せば済むはずです。
エラートラップというのは、伝家の宝刀のようなもので、エラートラップは上級ワザなのです。こういう私でも、それに頼ると、さっぱりコードが見えなくなることがあります。今回は、識別子のExitSub(正しくは、Exit Sub) は認識されてしまっているけれども、本来は、エラーが出ていて、エラートラップで通り越ししているように見受けられます。
予想しうるエラーは、避けられるなら、事前にエラーの発生を極力避けるというのが、VBAの基本です。
今回は、やむを得ず、エラートラップを生かしますが、シート名を入れる前に、すべてをチェックすれば、少なくも、省メモリになると考えて作ったのですが、ここの質問者さんの多くは、VBAが少し分かるようになると、そういうコードはめんどうだから避けるようになってしまうようです。最近は、そういう人が多くなっているようです。今回だけは、一応、回答を付けておきます。
シートコピーは、元のシートに名前登録などないことが条件になります。
元のシートの名前を変えるのは、どうでしょうね。私なら、そのようなコードは書きません。
'//
Private Sub CommandButton1_Click()
Dim NewSheetName As String
NewSheetName = TextBox1.Value
If NewSheetName = "" Then Exit Sub
On Error GoTo Err1
Worksheets("Summary").Copy After:=Worksheets("Summary")
ActiveSheet.Name = NewSheetName
Worksheets("Summary").Select
MsgBox "Task Completed!"
'Unload Me 'UserForm終了
Exit Sub
Err1:
MsgBox "Invalid name!"
End Sub
それと、Sheets とWorksheets の違いは理解しておくようにしましょう。これも、基本です。
前回の質問ではすべての質問にお礼を付ける前に締切ってしまいました。大変失礼しました。
私はまだVBAを勉強中で、何が基本で何が基本じゃないかはわかりません。背伸びせずにわかる範囲から徐々に勉強していこうと思っている次第です。
いつかは頑張ってWendy02さんのように細かいことにも気を配れる完璧超人になりたいものです。ありがとうございました。
No.2
- 回答日時:
>フォームを閉じるという処理を目指しています。
だったら
exit sub でなく
フォームを閉じるという処理を目指しています。
ActiveWorkbook.Close または Workbook.Close
ではないでしょうか
この回答への補足
ワークブックではなくユーザーフォームを終了させる方法をお尋ねしたかったんです。Exit Sub をUnload Meに変更したら希望どおりに作動しました。ありがとうございました。
補足日時:2010/12/08 14:42お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
今の日本に期待することはなんですか?
目まぐるしく、日本も世界も状況が変わる中、あなたが今の日本に期待することはなんですか?
-
テレビやラジオに出たことがある人、いますか?
テレビやラジオに取材されたり、ゲスト出演したことある方いますか?
-
思い出すきっかけは 音楽?におい?景色?
記憶をふと思い出すきっかけは 音楽、におい、景色 どれですか?
-
VBAでcallで呼び出したsubを終了させる
Visual Basic(VBA)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
callで順に実行されるプロシージャを途中で止める方法
Excel(エクセル)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
押したボタンの位置取得(共通のマクロ)
Excel(エクセル)
-
6
エクセル ボタンに設定したマクロごとボタンをコピー
Excel(エクセル)
-
7
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
8
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
9
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
10
コピーしたファイルのマクロを実行すると前のファイルが開く
Access(アクセス)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
Excel VBAでフォーカスを移動しない方法の続き
Excel(エクセル)
-
13
VBAで入力数値について
Visual Basic(VBA)
-
14
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
15
【VBA】エラー処理で別プロシージャに飛ばす方法
Visual Basic(VBA)
-
16
パワーポイントのVBAでテキストボックスに値を変更させたいです
Visual Basic(VBA)
-
17
なぜExit Subがあるのかわかりません
Excel(エクセル)
-
18
エクセルVBA 作業後に選択範囲を解除する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】sheet作成時にマク...
-
ワークシート上に配置したコマ...
-
VBA シートの切り替えができな...
-
エクセル/マクロ Exit Subが実...
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
(int)キャストとintvalの違い
-
Excel2010でふりがなが漢字にな...
-
エクセルの文字間スペースを入...
-
InstallShieldWizardのエラー
-
イース6のセーブデータ移行
-
貼り付けをマクロで禁止させたい。
-
Microsoft Office XP Personaの...
-
エクセルVBAで参照設定というフ...
-
mfc42.dllファイルってなんです...
-
DVDDecrypter書き込み
-
Acrobat7.0をWin7(64bit)へ
-
Chromebook Linux Extundelete...
-
Cuda check failed(35 vs 0):CU...
-
Blenderを使いたいのですが、フ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】sheet作成時にマク...
-
VBA シートの切り替えができな...
-
エクセル/マクロ Exit Subが実...
-
マクロ実行ボタンがコピー出来ない
-
VBAでシートコピー後、シート名...
-
エクセル 「実行時エラー"13":...
-
フェイス・シートについて教え...
-
Excelユーザーフォームでシート...
-
ワークシート上に配置したコマ...
-
エクセル 複数シートのフィル...
-
エクセルのワークシートの並べ替え
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
オペランドが足りませんとコメ...
-
mfc42.dllファイルってなんです...
-
エクセルの文字間スペースを入...
-
pythonでrequestsが使えない
-
Excel2010でふりがなが漢字にな...
-
Blenderを使いたいのですが、フ...
-
AUTOCAD 2010でdwlファイルの場...
おすすめ情報