• ベストアンサー

ExcelVBAでオプションボタンの選択状態を取得

ActiveXコントロールのオプションボタンをエクセルのシート上に作成しました。 標準モジュールの中からこのオプションボタンの選択状態を取得したいと思い、下記のようなコードを書きました。 opt1の中身を見たところValueプロパティがなくオプションボタンの選択状態をどう判別すればよいかわかりません。教えていただけますでしょうか。 Set mainSheet = Worksheets("main") Set opt1 = mainSheet.OLEObjects("OptionButton1") ※シート名:main オブジェクト名:OptionButton1

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (746/5660)
回答No.2

直接、シートオブジェクト名.OptionButton1.Valueで取得する方法はどうでしょうか。 シートオブジェクト名と言うのは、シート名とは異なります。 意図的に同じにしていれば同じですけれども。 プロジェクトウィンドウのツリーに、シートオブジェクト名(シート名)となっていると思います。 プロパティウィンドウでも確認できると思います。

unko347
質問者

お礼

ご回答ありがとうございました。 opt1.Object.Valueとすることで選択状態を取得することができました。 ご回答いただきました方法も試してみたいおもいます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率65% (1641/2491)
回答No.1

Set mainSheet = Worksheets("main") Set opt1 = mainSheet.OLEObjects("OptionButton1") Debug.Print opt1.Object.Value もしくは Set mainSheet = Worksheets("main") Set opt1 = mainSheet.OptionButton1 Debug.Print opt1.Value で試してみてください。

unko347
質問者

お礼

ご回答ありがとうございます。 opt1.Object.Valueとすることで選択状態を取得することができました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • フレーム内のオプションボタン状態取得方法について

    excel2010 フレーム内のオプションボタン状態の取得方法について教えてください。 従来、オプションボタンの状態はLinkedCellにセルアドレスを設定(H2と設定)すれば、 下記の様に設定すれば、チェックが入っているかどうかを確認できました。 If Range("H2") = True Then …(1) 今回、オプションボタンを大きく設定したかったので、 excel2010の 開発→挿入→コントロールの選択で Microsoft Forms 2.0 Frame を選択し、フレームを作成。 フレームオブジェクト→編集でZOOMを200に設定。 ツールボックスからオプションボタンを選択し配置。 これで通常の2倍の大きさのオプションボタンを配置できました(OpitonButton1)。 このオプションボタンのプロパティを見ると、LinkedCellという項目がありません。 このフレーム内に設定したオプションボタン(OptionButton1)が選択されているかどうかを 確認する方法を知りたいのです。 ホームページで調べたのですが、(1)の部分がどういう書式に代わるかを教えていただきたく。 尚、オプションボタンはフレーム内に2ケ(OptionButton1,OptionButton2)配置しています。

  • Excel2007 VBA シート上のオプションボタン

    Excel2007のVBAで質問があります。 シート上に複数(90個)のオプションボタンが設置しているシートが有りコマンドボタンが押されたときに どのオプションボタンが選択されているか判断したいのですが、 IF文で一つ一つ下記のように書くと個数が多いたムダに長いロジックになります。 If Worksheets("Sheet1").OptionButton1.Value Then chk_f = 1 end If If Worksheets("Sheet1").OptionButton2.Value Then chk_f = 2 end If         :         : ユーザーフォームに設置しているオプションボタンは、下記のようにFor文で回せるのは判っているのですが、 For i = 1 To 90 If Me.Controls("OptionButton" & i).Value Then chk_f = i exit for End If Next シート上のオプションボタンでも同様の事は可能でしょうか? もしなければオプションボタンとセルをリンクさせてそのセルをFor文で回して確認していく方法が出来るかなと考えています。

  • エクセルのオプションボタンについて

    エクセルVBAの初心者です。 ブックAのSheet1にコントロールツールボックスよりオプションボタンを使って、OptionButton1にA室、OptionButton2にB室、OptionButton3にC室という名前をつけて作成しました。この3つのオプションボタンの内いずれかを選択した時に、別のブックBのSheet1のセルA1に転記したいのですが、VBAを使って転記をすることはできるでしょうか? 分かりにくい説明で申し訳ありませんが、宜しくお願い致します。

  • VBA オプションボタンの分類について

    http://okweb.jp/kotaeru.php3?q=1424026 でオプションボタンの表示に関して質問をした者です。 ボタンを自動作成する事はできたのですが例えば1日と15日に 休暇を取得した場合、ボタンが6つ表示されるのですが(1日分が3コ、15日分が3コ)、 この6つのボタンのうち1つしか選択ができません。 (2つ目を選択すると、前に入力していたものはチェックが外れる。) 日にちごとに、1つずつボタンを選択するようにするにはどうしたら良いのでしょうか? ちなみに、当該処理の今記述しているソースは以下のとおりです。 休暇情報の書き出しが終了するまでループで回しています。 ご教授ください。宜しくお願い致します。 '当日ボタン作成 Set objOLEToday = ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _ DisplayAsIcon:=False, Left:=565, Top:=100 + objCnt, Width:=45.5, Height:=15.5) objOLEToday.Object.Caption = "当日" '事前ボタン作成 Set objOLEBefore = ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _ DisplayAsIcon:=False, Left:=750, Top:=100 + objCnt, Width:=45.5, Height:=15.5) objOLEBefore.Object.Caption = "事前" '無断ボタン作成 Set objOLENotice = ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _ DisplayAsIcon:=False, Left:=920, Top:=100 + objCnt, Width:=45.5, Height:=15.5) objOLENotice.Object.Caption = "無断" '表示位置設定 objCnt = 405.4 + objCnt

  • タブストリップの中のオプションボタン

    お世話になります。 Excel2007を使用しており、VBAでの質問です。 ユーザーフォームに、タブストリップを作成し、クイズを作っています。その中に選択肢として、フレームの中にオプションボタンを3つ配置しました。 オプションボタンを押すと、ワークシート"緑"のI列のセルに反映させるようにしています。 Private Sub OptionButton1_Click() Worksheets("緑").Select Select Case TabStrip1.Value Case 0  Range("I3").Value = "A" Case 1  Range("I4").Value = "A" Case 2  Range("I5").Value = "A" Case 3      Range("I6").Value = "A" End Select End Sub これをOptionButton2なら、"B"。OptionButton3なら"C"にします。 しかし、今の状態では、OptionButton1を押し、タブを替えると、すべてOptionButton1が選択されているように見えてしまいます。実際には、セルに反映しているので、後の答え合わせなどは大丈夫なのですが、ユーザーフォームから見直ししたい場合にみると、わかりにくいのではないかと思います。なので、オプションボタンは ・タブを替えても、自分が選択したものにチェックがはいっている。 ・まだ、回答をクリックしてないものには、チェックが入っていない。 つまりタブごとに、違う選択を表示させたいのです。それとも、マルチページで作成したほうがいいのでしょうか? 説明が下手ですみません。どうぞよろしくお願いします。

  • VBAでオプションボタンの設定

    ワークシート上にOLEオブジェクトのオプションボタンを配置して、LinkedCellを設定し、同一行でGroupName を設定し、Caption をYesとNoにしようと思いました。 ところが、以下のコードですと、GroupName とCaption がエラーになってしまいます。 どのように直せばいいのでしょうか? エクセル2003です。 Sub test01() Dim n As Long, i As Long With ActiveSheet For n = 1 To 2 For i = 1 To 3 Set opt = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", _ Left:=.Cells(i, n).Left, Top:=.Cells(i, n).Top, Width:=50, Height:=18) opt.LinkedCell = .Cells(i, n).Offset(, 4).Address ' opt.GroupName = "OptG" & i ' opt.Caption = IIf(n = 1, "Yes", "No") Next i Next n End With End Sub

  • VBAでオプションボタンを透過

    ワークシート上にOLEオブジェクトのオプションボタンを設置するため、以下のようなマクロを書きました。 意図したように作動するのですが、一箇所だけ不具合があります。 .Object.BackStyle = fmBackStyleTransparent と、透過に設定してるのですが透過してくれません。(エラーにもなりません。) どこがおかしいのでしょうか? Sub test02() Dim n As Long, i As Long Dim myRng As Range With ActiveSheet For n = 3 To 5 For i = 3 To 10 Set myRng = .Cells(i, n) Set opt = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", _ Left:=myRng.Left + 2, Top:=myRng.Top + 2, Width:=myRng.Width * 0.8, Height:=myRng.Height * 0.9) opt.LinkedCell = myRng.Offset(, 4).Address opt.Object.Value = False opt.Object.GroupName = "OptG" & i opt.Object.Caption = Choose(n - 2, "Yes", "No", "N/A") opt.Object.BackStyle = fmBackStyleTransparent Next i Next n End With End Sub

  • Excel VBA 複数あるオプションボタンの処理

    excel VBAで、複数あるグループ内のオプションボタンを、グループ別にまとめてoffにする方法を探しております。 下のcodeではsheet上のすべてのオプションボタンをoffに出来ますが、グル-プ別にしたいのです。 In ActiveSheet.グループ1.OLEObjectsみたいに(これはNGでした)。 Dim myObj As OLEObject For Each myObj In ActiveSheet.OLEObjects If myObj.progID = "Forms.OptionButton.1" Then  myObj.Object.Value = False End If 宜しくお願い致します。

  • シート上のオプションボタン、チェックボックスを配列にする。

    シート上のオプションボタン、チェックボックスを配列にする。 Excel2003です。 シート上にオプションボタン、チェックボックスを増やすと、OptionButtonN、CheckBoxN (大文字Nは任意の数値)となります。これをOptionButton(N)のように配列にできないでしょうか? プログラムで扱う場合、配列でしたら処理が楽になると思うからです。 また、同じくシート上にオプションボタンを配置するとどれか1つしか選択できません。(ひとつしかValueをTrueにできません。) UserFormのようにFrameがあればその中で1つを選択できるのですが、シート上に直接配置する場合、Frameが扱えないように思います。グループ化して複数選択する方法はないでしょうか。 よろしくお願いします。

  • Excel2007 VBA ラジオボタン Caption

    動的に生成したActiveXコントロールのOptionButtonのプロパティを設定しようと考えています。 For i = StRow To EdRow Step 1 Sheet.Cells(i, Col).Select Left = ActiveCell.Left Top = ActiveCell.Top Width = ActiveCell.Width Height = ActiveCell.Height Set Page = Sheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", _ Left:=Left, _ Top:=Top, _ Width:=Width, _ Height:=Height) Page.Name = "Opt" + CStr(i) Page.GroupName = "選択" Page.Caption = "" Next i Nameプロパティは正常に設定できるのですが、GroupNameとCaptionでエラーになってしまいます。 エラー'438' オブジェクトはこのプロパティまたはメソッドをサポートしていません。 となります。 VisualBasicのヘルプよりOptionButtonのプロパティとしては存在しているので、なぜサポートしていないといわれるのかがわかりません。 どのようにすれば設定可能でしょうか。

このQ&Aのポイント
  • ログイン後、グレーの画面でポインターのみ動く状態から機能のリフレッシュにて作動させた後、Wi-Fiに接続はするもののインターネットに繋がらなくなってしまった。
  • 昨日久々に起動したが、グレー画面になってしまい7年ほど使わずにいたものだ。
  • 携帯電話のテザリング機能を使い接続をしている状態で、他の機器は正常に動作している。解決方法を知っている方は教えていただきたい。
回答を見る