重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Excelのシート上に設置された全てのトグルスイッチを「False」にしたい。
For each 〜
でオブジェクトタイプがToggleButtonであるか判断し、
Value = False
にすればいいと思うのですが、うまく出来図に悩んでいます。

おわかりになる方、教えてください。

A 回答 (4件)

> オブジェクトタイプがToggleButtonであるか判断し、



progID で判別できます。

Dim obj As Object
For Each obj In ActiveSheet.OLEObjects
 If obj.progID = "Forms.ToggleButton.1" Then
  obj.Object.Value = False
 End If
Next
    • good
    • 1
この回答へのお礼

ありがとうございます。
お教えいただいたコードで動作確認できました。
オブジェクト名にとらわれずに動作しますね。
progIDは初めて聞きました。
素人目ですが、こちらのコードが最適解なのかな、と感じました。

お礼日時:2019/03/31 15:03

このようなコードでできました!


解説としては,名前をLeft関数で抜き出しただけです。
でも,質問者さんの状況なら,十分動くはずです。
どうでしょうか?


Sub ToggleSetFalse()
Dim obj As Object
For Each obj In ActiveSheet.OLEObjects
If Left(obj.Name, 12) = "ToggleButton" Then
obj.Object.Value = False
End If
Next
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。
お教えいただいたコードで動作確認できました。
オブジェクト名が「ToggleButton」からはじまっているという条件付きですね。

お礼日時:2019/03/31 15:00

ループするためには、"OLEObjects " この単語を思いつけばできます。


ただ、今、以下のコードでは、TypeName でOLEobject にしていますが、ToggleButton を選別するようにはできていません。やはり、Name やCaption で、Like 演算子で、Like "Toggle* " などとしたほうが確実でしょう。

Sub ToggleSwiching()
 Dim o As Object
 For Each o In ActiveSheet.OLEObjects
  If TypeName(oj) = "OLEObject" Then
   o.Object.Value = False
  End If
 Next
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。
おっしゃる通りで、OLEObjectsが出てきてませんでした。
お教えいただいたコードで動作確認できました。

4行目「oj」→「o」ですね。

お礼日時:2019/03/31 14:54

質問:


ボタンの種類はActiveXコントロールですか?
また,その場合,ボタンの名前はToggleButton1などになっているでしょうか?

その場合なら,結構簡単にできそうですよ。
    • good
    • 1
この回答へのお礼

ありがとうございます、
ボタンの種類はActiveXコントロール
ボタンの名前はToggleButton1からの連番になっています。

検索して、名前の連番部分だけ変え、直接名前で指定して処理するような方法は見つけたのですが、
名前を変えることになるため、For each ~で処理する方法を探しておりました。

お礼日時:2019/03/30 22:37

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