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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/03/29 01:35:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント34pt

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

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

他4件のコメントを見る
id:tetlis

①ボタンを押したらまずセルの入力内容をチェック。エラーがあれば、メッセージを出して以降の処理をストップ。

②セルの入力内容を修正してボタンを押せば、再度入力内容チェック。問題なければ、以降の処理を続ける。

こんな動作を望んでいます。


複数のシートにあるボタンがまったく同じ動作をするので、動作を一か所に集約したいと思い上記のようなコードになっています。

2013/03/22 23:17:41
id:taknt

>以降の処理をストップ。

処理がストップしちゃうのではなく、スキップさせる ということでは ないでしょうか?

たとえばシート名を配列に保持しておいて 一度 実行した シートは やらないようにすればいいかと思います。

2013/03/22 23:54:01
id:ruirui01231 No.2

回答回数641ベストアンサー獲得回数17

ポイント33pt

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

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

id:kanton69 No.3

回答回数43ベストアンサー獲得回数0

ポイント33pt

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

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません