プロが教えるわが家の防犯対策術!

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

A 回答 (3件)

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
'--------------------------------------------------

以上。
 
    • good
    • 3
この回答へのお礼

onlyrom様
ActiveSheet.OLEObjects("CheckBox" & N).Object.Value
を使わせていただきました。
ありがとうございました。

お礼日時:2008/02/18 17:00

> 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を使っています。

これは、一緒の話、クラスの親が違うだけ、親によって、格納される場所が違うと言うのは、最初の話
    • good
    • 0

例えばで



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を使っています。

補足日時:2008/02/18 11:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A