ExcelVBAのOLEObjectsでシート上のActiveXコントロールを使用不可にする方法

ExcelVBAのOLEObjectsでシート上のActiveXコントロールを使用可能にするコード

シート上に設置したActiveXコントロールを処理の都合から使用不可にするのはいいですが、元に戻さないといけません。その場合は簡単で、以下のように4行目をEnabled = Trueにして実行すれば、シート上に設置された全てのActiveXコントロールが使えるようになります。

Sub ActiveXコントロール()
Dim c
For Each c In Sheets("Sheet1").OLEObjects
   Sheets("Sheet1").OLEObjects(c.Name).Object.Enabled = True
Next c
End Sub

指定したActiveXコントロールだけ使用不可にしたい場合

この場合も特に難しくはありません。ここまで記述したコードの中に以下のようにIF文を入れると指定のActiveXコントロールだけ使用不可にできます。

Sub ActiveXコントロール()
Dim c
For Each c In Sheets("Sheet1").OLEObjects
   If c.Name Like "CommandButton*" Then
      Sheets("Sheet1").OLEObjects(c.Name).Object.Enabled = False
   End If
Next c
End Sub

上記のコードはFor Eachステートメントで順番に見ていくコントロールの中でオブジェクト名の中に「CommandButton」の文字列が含まれているものだけを使用不可にするコードです。

 

例えばシート上にコマンドボタンが10個、ラベルが10個あったら、コマンドボタン10個だけを使用不可にできます。

 

もう一度コントロールを使えるようにするには、上記のコードのSheets(“Sheet1”).OLEObjects(c.Name).Object.Enabled = Falseの中のFalseをTrueにすれば元に戻ります。

 

他にも特定のActiveXコントロール使用不可にしたいのであれば、そのActiveXコントロールのオブジェクト名を「=」で直接指定するか、「Like」と「*」を使って「特定の文字列が含まれる」形で指定することで特定のActiveXコントロールを使用不可にできます。

まとめ

以下の過去記事でも書いたのですが、自分が欲しいExcelVBAのコードというものは意外にも「見つからない」ということです。

 

ExcelVBAというのは一般の人の手に渡ってから20年以上経っています。そのため、必要とされるコードというのはほとんどが網羅されてインターネットや書籍などで誰でも簡単に見ることができる、と以前は思っていました。

 

しかし今回のコードの件の様に、一般的には「できない」と言われているけれども、色々と試行錯誤してみることで自分の意図するコードが見つかる、という場合もあります。

 

今回の件というのは非常に珍しいと思われるかもしれませんが、過去記事でもいくつか書いたのですが意外と結構あるものです。

 

ですから、インターネット上では「できない」と言われていたり、自分の欲しいコードがなかなか見つからなかった場合でも「本当に解決策はないのか」と疑って試行錯誤してみることで「実はこんなコードがあった」なんてことがあるかもしれません。

あわせて読みたい

こんな記事も読まれています

コメント