人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ExcelのVBAに詳しい方へ。

下記コードで、ボタンを押したときにボタン名が表示されるようにしています。

が、途中で「end」するボタンを押すと、その後はどのボタンを押しても反応しなくなります。( [PROBLEM]ボタン。)

どうしたら途中で「end」しても、その後にボタンが動作するでしょうか。

◆ThisWorkbook

Dim myBtnTbl As New Collection

Private Sub Workbook_Open()
Dim obj As Object
Dim myCls As New Class1
Dim Sht As Worksheet

For Each Sht In Worksheets
With Sht
For Each obj In Sht.OLEObjects
If obj.progID = "Forms.CommandButton.1" Then
myCls.BtnEvent obj.Object
myBtnTbl.Add myCls
Set myCls = Nothing
End If
Next
End With
Next Sht

End Sub

◆標準モジュール

Sub test()

Dim testFlag As Boolean
MsgBox "PROBLEM"
testFlag = True

If testFlag = True Then
End

End If

End Sub

◆クラスモジュール
Private WithEvents mybtn As MSForms.CommandButton

Public Sub BtnEvent(newbtn As MSForms.CommandButton)
Set mybtn = newbtn
End Sub

Private Sub mybtn_Click()

Select Case mybtn.Name

Case "A"
MsgBox "A"
Case "B"
MsgBox "B"
Case "PROBLEM"
Call test
End Select

MsgBox "終了!"

End Sub

●質問者: tetlis
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●34ポイント

endは プログラムの終了を意味しますので、その後 動かなくなるのは 当然ですね。

どうして endとするのでしょうか?
別の方法を 考えたらいいと思いますが。


tetlisさんのコメント
ありがとうございます。具体的にどのようにすればよいでしょうか?

きゃづみぃさんのコメント
まず If testFlag = True Then End End If が 何をやりたいのかを 教えてください。

tetlisさんのコメント
実際のコードでは、この直前にセルに入力された内容のチェックをします。 問題があればメッセージを出して、以降の処理(この例では MsgBox "終了!")をせずに終了。 問題がなければ、処理を続ける。 としたいです。

きゃづみぃさんのコメント
この問題があったときに 終了後、 続けるんですか? 終了というのは、ボタンを 押しても反応しなくなることですよね?

tetlisさんのコメント
?ボタンを押したらまずセルの入力内容をチェック。エラーがあれば、メッセージを出して以降の処理をストップ。 ?セルの入力内容を修正してボタンを押せば、再度入力内容チェック。問題なければ、以降の処理を続ける。 こんな動作を望んでいます。 複数のシートにあるボタンがまったく同じ動作をするので、動作を一か所に集約したいと思い上記のようなコードになっています。

きゃづみぃさんのコメント
>以降の処理をストップ。 処理がストップしちゃうのではなく、スキップさせる ということでは ないでしょうか? たとえばシート名を配列に保持しておいて 一度 実行した シートは やらないようにすればいいかと思います。

2 ● ruirui01231
●33ポイント

Goto文で末尾にジャンプする。

http://excelvba.pc-users.net/fol6/6_7.html


3 ● kanton69
●33ポイント

http://www.moug.net/tech/acvba/0030008.html

こちらが参考になるでしょうか?

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ