2010-12-03 3 views
3

많은 모양을 가진 Excel 워크 시트를 고려하십시오. 이 개 모양을 선택하려면 :패턴과 일치하는 모든 Excel 그리기 레이어 모양 삭제

ActiveSheet.Shapes.Range(Array("Freeform 314", "Freeform 278")).Select 

목표는 "자유형"로 시작하는 모든 모양을 삭제하는 것입니다.

MS VBScript 정규식 5.5을 참조하는 예제가 있지만 특정 셀에는 셰이프가 없습니다. 양이나 특정 모양의 숫자는 거의 알려지지 않았습니다. 그래서 추한 솔루션은 문자열 이름을 무차별 적으로 만들 수 있습니다. 반면에 당신이 우아한 해결책을 얻기 위해 나를 도울 수 있기를 바랍니다.

아래 코드는 작동하지 않지만 문제를 더 잘 이해할 수 있습니다. 당신이

Dim shape as Variant 
For each shape in ActiveSheet.Shapes 
    If instr(1, shape.Name, "Freeform") <> 0 then shape.delete 
Next shape 

을 테스트하고 작동

을 가면이 훨씬 훨씬 쉬울 것 같은

Sub DeleteShapes() 

    Dim re As New RegExp 
    re.Pattern = "Freeform*" 
    Dim cell As Range 
    For Each cell In ActiveSheet.Shapes.Range(Array(re.Pattern)).Select 
     Selection.delete 
    Next cell 
End Sub 

답변

3

보인다. 활성화 된 시트에서 전체 모양 컬렉션을 가져오고, 각각에 대해 "자유 형식"이라는 단어가 모양 이름에 있으면 모양을 삭제합니다. 대신 시험의 특별히 "자유형"로 시작하는 단지 모양을 삭제하려면

, 다음 : INSTR (1, shape.Name은 "자유형")는 <> 0 당신은 사용해야 INSTR (1, 모양을 .Name, "Freeform") = 1

+1

고맙습니다.이 솔루션을 유용합니다. –

4

자유 형식 도형을 찾으려면 정규 표현식이 필요하지 않습니다.

Dim shape As Excel.shape 

For Each shape In ActiveSheet.Shapes 

    If Left(shape.Name, 8) = "Freeform" Then 
     shape.Delete 
    End If 

Next 
+1

대단히 감사합니다! –

관련 문제