Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
activeXコントロールのコマンドボタンが消える
投稿日時: 23/06/14 09:06:12
投稿者: jack205

お願いします。
データ値によって指定位置に図の描画と次に描画する時の消去で、activeXコントロールのコマンドボタンが消去されてしまいます。 フォームコントロールのボタンでは消去されません。
activeXコントロールのコマンドボタンを使用したいのですが、消去されないVBが知りたいです。
 
描画は、
Set Ob_DD = ActiveSheet.Shapes.AddShape(msoShapeOval, ix1, ix2, 16, 16)
                        Ob_DD.Select
                        Selection.ShapeRange.Fill.Visible = msoFalse
             ・・・・
 
消去は、
For Each MyObj In ActiveSheet.DrawingObjects
        If Not MyObj.Name Like "Button*" Then
            MyObj.Delete
        End If
  Next
 
(このVBは過去にWEB上からいただいたものです)
よろしくお願いします。
 
 

回答
投稿日時: 23/06/14 09:24:43
投稿者: WinArrow

>If Not MyObj.Name Like "Button*"
名前で判定しているが、
ActiveXのコマンドボタンは、
「CommandButton1」のような名前になります。
フォームコントロールのコマンドボタンは、
「Button 2」のような名前になります。
 
従って、コードでは、ActiveXのコマンドボタンは、削除されてしまいます。
 
対処法としては、
>If Not MyObj.Name Like "*Button*"
に変更する方法が簡単かと思います。
 
しかし、名前は、簡単に変更できてしまうので
TYpeで判定したら如何でしょう?

回答
投稿日時: 23/06/14 09:59:48
投稿者: WinArrow

アドバイス
   
1.WEB上のコードをそのまま利用することは、簡単なようで、難しいことです。
  そのコードの意図、背景なども一緒に、コピペすることをお勧めします。
  勿論、意図や背景は、コピペできませんから、
  応用する際に、自分の意図・背景に合致するかまで、コードを理解することです。
   
2.Typeで判定する場合、
   ActiveXとフォームコントロールは、別ものですから、プロパティ値は、異なります。
 また、DrawingObjectsには、Typeプロパテイはありません。
 どこにあるのかを探してみましょう。
 因みに「DrawingObjects」は、古いVBAにあったもので、現在は、Shapeを使う方が主流になっています。
 
 これもスキルアップに繋がります。

投稿日時: 23/06/14 10:04:00
投稿者: jack205

WinArrowさん
 
ありがとうございます。
過去に作ったシートの手直し中でした。
名前を表示させてみて理解できました。
TYPEについても研究してみます。
 
ありがとうございました。