ここから本文です

Excel VBA ユーザーフォーム上の特定のコントロール(ex. チェックボックス)だけ...

mas********さん

2016/11/1800:42:43

Excel VBA ユーザーフォーム上の特定のコントロール(ex. チェックボックス)だけをカウントする方法

お世話になります。

見出しの通りなのですが、
例えばユーザーフォーム上に7つのテキストボックスと3つのチェックボックスがあるとします。
それで、全てのコントロールをカウントする場合は、
CtrlCnt = UserForm1.Controls.Count
MsgBox CtrlCnt
とすれば、10という数字が返ってきます。

では、チェックボックスだけをカウントする方法はあるのでしょうか。
宜しくお願い致します。

閲覧数:
401
回答数:
3
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

だるまさん

2016/11/1810:10:02

TypeOfでオブジェクトの種別を判断する例と、
TypeName関数で判断する例が回答されていますが、
正解は後者、TypeName関数の方です。


理由は、TypeOfの方では

オプションボタンもCheckBoxと判定されてしまうからです。
それが、仕様なのかバグなのかは分かりません。


ですので、今回の質問のように特にこの種類と特定していない
一般的な場合では、TypeName関数を使うべきです。


ただ、TypeName関数ではタイプミスをしたりそもそも綴りが
良く分からないなどの不便があります。

一方、TypeOfを使うとインテリセンス(.の後に候補が表示される)
が働くので、そういうミスや不便がありません。


ということで、上記の【理由】の部分を十分承知の上であれば、
TypeOfを使用するのも便利です。


コードは、改めて書いたところで既出のコードと大差ないので省略します。^d^

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

m3_maki0さん

2016/11/1805:43:19

こんな感じで。

Dim Ctrl As Control
Dim CtrlCnt As Long

For Each Ctrl In UserForm1.Controls
If TypeName(Ctrl) = "CheckBox" Then
CtrlCnt = CtrlCnt + 1
End If
Next

MsgBox CtrlCnt

kak********さん

2016/11/1801:41:43

'コード例
Option Explicit

Public Sub Sample()
Dim ctrl As MSForms.Control
Dim CtrlCnt As Long

For Each ctrl In UserForm1.Controls
'チェックボックスの型を判断する
If TypeOf ctrl Is MSForms.CheckBox Then
CtrlCnt = CtrlCnt + 1
End If
Next

Call MsgBox(CStr(CtrlCnt))

End Sub

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる