Excel VBAでCheckboxの名前を変数にとって値を調べたい
Excel VBAでCheckboxの名前を変数にとって値を調べたいのです.
シートにCheckboxがたくさん貼ってあり名前とOn,Offを調べたいのですが下記では名前は調べられてもOn,Offが確認できないのですが
On,Offを別変数にとる場合タイプはなににすればいいでしょうか。
たとえば
dim i as integer
dim checkname()
dim checvalue() as ????
i=0
for i=1 to 2
If Mid(ActiveSheet.Shapes(i).Name, 1, 5) = "Check" Then
i=i+1
redim preserve checkname(i)
checkname(i)=ActiveSheet.Shapes(i).Name
redim preserve checvalue(i)
checvalue(i)=ActiveSheet.Shapes(i).value <---これではエラー
end if
next i
回答(3件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.3ベストアンサー20pt
Shape、OleObjectなど知らなくても使える方法は
CheckBoxのLinkedCellプロパティを使うことです。
CheckBox1 の LinkedCell を セルF1
CheckBox2 の LinkedCell を セルF2
CheckBox3 の LinkedCell を セルF3 にセットしておくと
CheckBoxのOn、OffがF1~3のセルに表示されますのでそれを使えば簡単ですね
'-------------------------------------------
Sub test222()
Dim N As Integer
Dim myValue(3)
For N = 1 To 3
myValue(N) = Cells(N, "F").Value
Next N
End Sub
'------------------------------------------
それからObjectの意味が分かって使うなら、次のコード。
(LindedCellプロパティは使用しない)
'-------------------------------------------------
Sub test333()
Dim N As Integer
Dim myValue(3)
For N = 1 To 3
myValue(N) = ActiveSheet.OLEObjects("CheckBox" & N).Object.Value
Next N
End Sub
'--------------------------------------------------
以上。
この回答へのお礼
onlyrom様
ActiveSheet.OLEObjects("CheckBox" & N).Object.Value
を使わせていただきました。
ありがとうございました。
> Checkboxがチエックされたかどうかは.ValueがTrueかFalseになるの
> ではなかったですか?
多分、デバッグの方法が判ってれば、型がウォッチで判りますので、こういう質問が出ることは無いのですが・・・
CheckBox型であれば、.Valueで値が取得可能ですが・・・
> ActiveSheet.Checkbox1
は、CheckBox/CheckBox
> ActiveSheet.Shapes(i)
は、Object/Shape
要するに、Shape型に、値があるはずもなく、描画しているチェックボックスの型
ActiveSheet.Shapes(i).DrawingObject.Object
まで、CheckBoxの型を追いかけなければ、出てきません
まずは、デバッグのやり方を覚えないと、基礎の基礎が判らないまま、手探りでVBAを組むようになりますよ
> 書いていませんでしたがフォームのCheckboxではなく
> コントロールチエックボックスのCheckboxを使っています。
これは、一緒の話、クラスの親が違うだけ、親によって、格納される場所が違うと言うのは、最初の話
例えばで
Dim usObj As Object
For Each usObj In ActiveSheet.Shapes
If usObj.Name Like "Check*" Then
Debug.Print usObj.Name, usObj.DrawingObject.Object.Value
End If
Next usObj
そもそも論、
ActiveSheet.Shapes(i)に、Valueは有りません
デバッグの方法、判ります?
それが判ってれば、こんな話質問するまでも無いと思うけど?
あと
> i=0
は、For文で初期化してるから無駄
> i=i+1
For文の中で、iを足し算するのは?なぜ?
この回答への補足
>ActiveSheet.Shapes(i)に、Valueは有りません
Checkboxがチエックされたかどうかは.ValueがTrueかFalseになるのではなかったですか?
(ActiveSheet.Checkbox1.Value=True)
> i=0
iは入力間違いでした。
動的配列なのでiiとかでした。
書いていませんでしたがフォームのCheckboxではなく
コントロールチエックボックスのCheckboxを使っています。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示












