2016-07-21 16 views
0

シートに動的に追加されたチェックボックスとラベルを削除するルーチンを作成しました。ただし、すべてのコントロールを確実に削除するわけではありません。もう一度追加する前に完全に削除する必要があります。Excel 2003、すべてのOLE /シェイプコントロールを削除しないVBA

は、ここに私のルーチンです:

Public Sub removeOLEtypesOfType() 
     On Error Resume Next 

     Dim intPass As Integer, objShape As Shape 
     For intPass = 1 To 2 
      For Each objShape In ActiveSheet.Shapes 
       Dim strName As String 
       strName = objShape.Name 
       If Mid(strName, 1, Len(CHECKBOX_PREFIX)) = CHECKBOX_PREFIX _ 
       Or Mid(strName, 1, Len(LABEL_PREFIX)) = LABEL_PREFIX _ 
       Or Mid(strName, 1, 5) = "Label" Then 
        objShape.Delete 
       End If 
      Next 
     Next 
    End Sub 

は、私は唯一のオブジェクトが削除されることを保証するためにループのための2つのパスを追加しましたが、でもこれは、残りの項目は削除されません。私が持っている問題は、ワークブックで削除されなかったコントロールで終わることです。私は、チェックボックスの場合に名前がで始まっているチェックボックスとラベルを削除しようとしている

Public Const CHECKBOX_PREFIX As String = "chkbx" 

ラベルは接頭辞が付いてい:第3回検索はとの比較

Public Const LABEL_PREFIX As String = "lbl" 

「ラベル」は掃除しようとしていますが、それでもすべてを捕らえるわけではありません。

範囲内のすべてのシェイプ/オブジェクトを削除する方法はありますか?

固定

答えて

0

、私は範囲内の図形を削除する方法についてGoogle検索の後にサブルーチンを書き直し:

Public Sub removeOLEtypesOfType() 
     On Error Resume Next 

     Dim objTopLeft As Range, objBotRight As Range 
     Dim objRange As Range, objShape As Shape 
     Set objRange = Sheet1.Range(COLUMN_HEADINGS) 
     With objRange 
      Set objTopLeft = .Cells(1).Address(0, 0) 
      Set objBotRight = .cell(.Cells.Count).Address(0, 0) 

      For Each objShape In ActiveSheet.Shapes 
       If Mid(objShape.Name, 1, Len(CHECKBOX_PREFIX)) = CHECKBOX_PREFIX _ 
       Or Mid(objShape.Name, 1, Len(LABEL_PREFIX)) = LABEL_PREFIX Then 
        If Not Intersect(objTopLeft, objShape.TopLeftCell) Is Nothing And _ 
        Not Intersect(objBotRight, objShape.BottomRightCell) Is Nothing Then 
         objShape.Delete 
        End If 
       End If 
      Next 
     End With 
    End Sub 
関連する問題