エクセルマクロの質問です。エクセルのヴァージョンは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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
つい集めてしまうものはなんですか?
人間誰もは1つ「やたらこればかり集めてしまう」というものがあるもの。 あなたにとって、つい集めてしまうものはなんですか?
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
ちょっと先の未来クイズ第4問
11月ごろに発表される、2024年の「新語・流行語大賞」にノミネートされる言葉を書けるだけ書いてください。
-
あなたの習慣について教えてください!!
あなたが習慣だと思って実践しているものを共有してくださいませんか? 筋肉トレーニングでも朝シャワーでも、あなたが習慣だなと思えば何でも構いません
-
VBAでcallで呼び出したsubを終了させる
Visual Basic(VBA)
-
callで順に実行されるプロシージャを途中で止める方法
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
8
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
9
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
10
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
11
SQLを連続発行する時の正しい(?)書き方は?
Visual Basic(VBA)
-
12
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
13
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
14
excelのマクロで該当処理できなければ飛ばして進むにはどうすればよいのでしょうか
Visual Basic(VBA)
-
15
ユーザーフォームが消えない
Excel(エクセル)
-
16
エクセル ボタンに設定したマクロごとボタンをコピー
Excel(エクセル)
-
17
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
18
エクセルである行以下全部を削除する方法
Excel(エクセル)
-
19
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
20
Excelの条件付き書式設定の太い罫線
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelVBAについて。
-
エクセルの関数ついて
-
【マクロ】メッセージボックス...
-
エクセル初心者です 用語とか良...
-
Excelの警告について
-
excelVBAについて。
-
最新I/e?のキャッシュクリア
-
フィルター時の、別の列に書い...
-
フィルターをかけた時の、別の...
-
エクセル 別セルの2進数表示を...
-
エクセルシート保護を解除させ...
-
Excelの数式について教えてくだ...
-
excelVBAについて。
-
excelVBAについて。
-
条件付き書式の効率的な設定の...
-
編集者ってパソコンスキルどの...
-
IF 日付範囲に入っていたら
-
Excelの数式について教えてくだ...
-
カーソルを合わせてる時のみ行...
-
今までは、 「CSVの出力先を選...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】sheet作成時にマク...
-
エクセル/マクロ Exit Subが実...
-
VBA シートの切り替えができな...
-
エクセル 「実行時エラー"13":...
-
マクロ実行ボタンがコピー出来ない
-
VBAでシートコピー後、シート名...
-
エクセル 複数シートのフィル...
-
エクセル、シートのコピーについて
-
エクセルのシートを自動でコピー
-
フォルダ内の複数のファイルか...
-
こんなマクロ作れませんか?
-
Excel2000でシート上にボタンを...
-
フェイス・シートについて教え...
-
【エクセル】複数の文字を同時...
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
オペランドが足りませんとコメ...
-
エクセルの文字間スペースを入...
-
mfc42.dllファイルってなんです...
-
Excel2010でふりがなが漢字にな...
おすすめ情報