新しく質問する

Excel VBAでCheckboxの名前を変数にとって値を調べたい

役に立った:1件
  • 質問者:obone
  • 投稿日時:2008/02/18 08:53
  • 困り度:暇なときに回答をください

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

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:1件)
  • 参考になった:1件

No.3ベストアンサー20pt

  • 回答者:onlyrom
  • 回答日時:2008/02/18 13:46

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
を使わせていただきました。
ありがとうございました。

  • 参考になった:0件
  • 回答者:Dxak
  • 回答日時:2008/02/18 12:59

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

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

通報する

  • 参考になった:0件
  • 回答者:Dxak
  • 回答日時:2008/02/18 09:50

例えばで

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

  
このQ&Aは役に立ちましたか?(役に立った:1件)

このページのトップへ