Notifications
Clear all

macro para deletar WORDART

9 Posts
3 Usuários
0 Reactions
1,165 Visualizações
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Olá!
Eu tenho uma planilha com várias guias.
Numa determinada guia chamada "meeting" eu tenho (1) 3 wordarts sobrepostos, (2) algumas imagens que eu edito para servirem como ícones e que eu uso para atribuir minhas macros.
Eu preciso deletar esses WORDARTS, mas apenas os wordarts.
Seria possível?
ps. eu já encontrei macros que deletam todas as imagens da planilha (jpg) e macros que deletam todas as formas (shapes). Mas elas não me serviram pois acabam deletando tudo que tem na minha guia.
obrigado!!!

 
Postado : 18/06/2014 7:02 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Tente algo assim...

Sub AleVBA_12124() 
    Dim shpTemp As Shape 
    Dim lngIndex As Long 
     
    With ActiveSheet 
        For lngIndex = .Shapes.Count To 1 Step -1 
            If .Shapes(lngIndex).Type = 15 Then 
                .Shapes(lngIndex).Delete 
            End If 
        Next 
    End With 
     
End Sub 

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/06/2014 7:31 am
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Oi Alexandre!
Obrigado pela pronta resposta.
Eu inseri o código como vc postou mas qnd eu clico, nada acontece.
O que seriam esses números que você citou ali?
Porque os wordarts não mudam o tamanho. Talvez com tamanho definido possa ser mais fácil encontrar o objeto para deletar....

 
Postado : 18/06/2014 8:20 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!1

Mande o arquivo ou tente assim..

Sub AleVBA_12124V2() 
    Do Until activedocument.shapes.count=0 
        activedocument.shapes(1).delete 
    Loop 
End Sub

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/06/2014 8:22 am
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Alexandre, não funcionou ainda.
Deu um problema na primeira linha.
Anexo o arquivo conforme vc pediu.
Agradecido pela ajuda!!!

 
Postado : 18/06/2014 8:39 am
(@edcronos)
Posts: 1006
Noble Member
 

Já tentou GRAVAR uma macro excluindo as Shapes que vc quer para ter uma base?

eu não sei exatamente oq vc quer deletar, mas deletei aquele texto da frente

Sub deleta()
plan = "meeting semanal" '<<--nome da plan
Sheets(plan).Shapes.Range(Array("Rectangle 23")).Delete
End Sub

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 20/06/2014 1:01 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Interessante o tratamento do Excel 2007 em relação a Shapes e principalmente ao WordArt, estive acompanhando o post e fiquei intrigado quando julio disse que a rotina que o Alexandre indicou não havia funcionado, e como não utilizo muito a v 2007 fiz o teste no 2003 e funcionou corretamente, depois fiz o tese na v 2007 e realmente não funciona.
Em pesquisa, descobri que o Tipo para WordArt é o 15, mas isto somente na V 2003, onde é inserido com o nome padrão "WordArt 1" ...., na V 2007 é Inserido com o nome de "Retangle 1", 2, .... e é associado o tipo 1 pçara vários tipos de controles diferentes.

Encontrei varios tópicos na internet e acabei fazendo uma adaptação, só me esqueci de guardar as fontes, mas não será dificil encontrar.
Como o Edcronos citou, uma vez que na V 2007 é inserido como "Retangle" devemos utilizar da forma que ele indicou, mas como citou que são vários WordArts, e cada um assume um numero diferente, pode estar utilizando a seguinte rotina, isto se não renomeou as formas :

Sub DeletaWordArts()

    Dim sShapes As Shape, lLoop As Long
    Dim wsStart As Worksheet
    Set wsStart = ActiveSheet

    'Loop through all shapes on active sheet
    For Each sShapes In wsStart.Shapes
        'Increment Variable lLoop for row numbers
        lLoop = lLoop + 1
        
        With sShapes
            sNmShp = sShapes.Name
            SpacePos = InStr(sNmShp, " ")
            FirstName = Left(sNmShp, SpacePos - 1)
           
                If FirstName = "Rectangle" Then
                   ' sShapes.Visible = False
                    sShapes.Delete
                End If
                
        End With

    Next sShapes

End Sub

Para ilustrar melhor, o modelo abaixo tem uma rotina que cria uma nova aba e relaciona todos os shapes inseridos na aba Sheet1 com os devidos nomes, tipos e propriedades.

Relacionar Tipos, Nomes e propriedades Shapes v2007

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/06/2014 12:15 pm
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Rapaz!!!! Funcionou!!!
Como eu tinha outros Wordarts deletou tmb.. haha
mas aí eu consigo resolver os outros wordarts...
muito obrigado!!!
Vou continuar fazendo alguns testes aqui.... qualquer coisa, eu volto!!!
Um abraço!!!

 
Postado : 23/06/2014 6:55 am
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Já tentou GRAVAR uma macro excluindo as Shapes que vc quer para ter uma base?

eu não sei exatamente oq vc quer deletar, mas deletei aquele texto da frente

Sub deleta()
plan = "meeting semanal" '<<--nome da plan
Sheets(plan).Shapes.Range(Array("Rectangle 23")).Delete
End Sub

ele sempre gera novos retangulos com nomes diferentes... aí não funcionou desta forma...
mas obrigado, mesmo assim!

 
Postado : 23/06/2014 6:57 am