2017-10-25 5 views
0

コマンドボタン以外のすべての図形を削除する必要があります。または、楕円、直線、線を削除するだけです。Excel vbaの内部名/型を整形する

Sub deleteShapes() 

Dim shp As Shape 
For Each shp In ActiveSheet.Shapes 

    shp.Delete 
Next shp 

End Sub 

this answerではジェイミー・ブルは、図形を削除します。

If Not (Shp.Type = msoOLEControlObject Or Shp.Type = msoFormControl) Then Shp.Delete

しかし、どのように私は私のコマンドボタンの種類を取得することができますか?または他のオブジェクトタイプ?私は試しました

Sub testShapes() 
    Dim shp As Shape 

For Each shp In ActiveSheet.Shapes 
    MsgBox (shp.Type) 
Next shp 

End Sub 

しかし、それは数字だけを与えます:どの数字がどのような形であるか分かりません。 msoOLEControlObjectのような内部の名前を取得する方法はありますか、または少なくとも番号1が本当にコマンドボタンであることを確認するには?

+0

ループ内の名前を返すこともできます。 – SJR

+0

ActiveXコントロールかExcelフォームコントロールですか?はい、それは重要です。 –

答えて

2

タイプのリストはこちらです:https://msdn.microsoft.com/en-us/VBA/Office-Shared-VBA/articles/msoshapetype-enumeration-office あなたが持っているコントロールの種類についての詳細に関する情報を取得するには

if not shp.Type = msoOLEControlObject then 
    shp.Delete 
end if 

を書くことができますので、すべての値が、VBAでの定数として定義されています。

Dim sh As Shape 
For Each sh In Activesheet.Shapes 
    Debug.Print sh.Name, sh.Type 

    If sh.Type = msoFormControl Then 
     Debug.Print " msoFormControl:" & sh.FormControlType 
    End If 

    If sh.Type = msoOLEControlObject Then 
     Debug.Print " msoOLEControlObject: " & TypeName(sh.OLEFormat.Object.Object) 
    End If 
Next sh 

FormControlTypeはここに表示されます:https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlformcontrol-enumeration-excel - すべてがVBA定数としても定義されています

1

デフォルトのNシェイプのためのエイムズは、[フォームのボタンのために:

Sub poiuyt() 
    Dim shp As Shape 

    For Each shp In ActiveSheet.Shapes 
     If Left(shp.Name, 6) = "Button" Then 
     Else 
      shp.Delete 
     End If 
    Next shp 
End Sub 

とボタン場合は、その後のActiveXです:

Sub trewq() 
    Dim shp As Shape 

    For Each shp In ActiveSheet.Shapes 
     If Left(shp.Name, 13) = "CommandButton" Then 
     Else 
      shp.Delete 
     End If 
    Next shp 

End Sub 

このアプローチでは、名前がデフォルトのタイプである場合にのみ有効です。

関連する問題