Notifications
Clear all

Listar Sheet

6 Posts
5 Usuários
0 Reactions
1,430 Visualizações
(@xmiguelx)
Posts: 34
Trusted Member
Topic starter
 

Pessoal,

Preciso listar o nome das Sheets em uma coluna.

Exemplo em anexo:

1) Tenho uma Sheet com o Nome INDICE
Ao clicar no botão MONTAR INDICE gostaria que na coluna A2 em diante liste o nome de todas as Sheet que tenha o BOTÃO EXECUTAR.

DIFICULDADE.
* Se existir qualquer tipo de imagem em qualquer Sheet, meu comando não funciona.
* Se eu remover todas as imagens das sheets meu comando hoje funciona perfeitamente.
* Gostaria de adaptar meu comando de forma que funcione sem precisar deletar as imagens.

Sub GetSheets() 'Nome das Sheets
    Dim j As Integer
    Dim NumSheets As Integer
    Dim shp As Shape
    
    NumSheets = Sheets.Count
    
    Range("A2:A" & Rows.Count).ClearContents
    
    For j = 1 To NumSheets
        Sheets(j).Activate
        
        For Each shp In Sheets(j).Shapes
        If shp.Visible Then
            shp.Select
            If Selection.Characters.Text = "EXECUTAR" Then
                Sheets("INDICE").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets(j).Name
                Range("A1").Activate
            End If
        End If
        Next shp
        
    Next j
    
    Sheets("INDICE").Activate
    Range("A1").Activate
    
    
End Sub

Obrigado

 
Postado : 11/11/2016 6:26 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 


Testa assim:

Sub GetSheets() 'Nome das Sheets
Dim j As Integer
Dim NumSheets As Integer
Dim shp As Shape

NumSheets = Sheets.Count

Range("A2:A" & Rows.Count).ClearContents

For j = 1 To NumSheets
Sheets(j).Activate

For Each shp In Sheets(j).Shapes
If shp.Visible Then
shp.Select
On Error Resume Next
If Selection.Characters.Text = "EXECUTAR" Then
If Err.Number = 0 Then
Sheets("INDICE").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets(j).Name
Range("A1").Activate
End If
Err.Number = 0
End If

End If
Next shp

Next j

Sheets("INDICE").Activate
Range("A1").Activate

End Sub

 
Postado : 11/11/2016 7:17 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

xmiguelx,

Bom dia!

Segue a minha sugestão.

 
Postado : 11/11/2016 7:21 am
(@xmiguelx)
Posts: 34
Trusted Member
Topic starter
 

Amigo Edson não funcionou, ele duplica o nome de cada sheet.

Amigo Wag, sua sugestão funcionou, porém preciso que só liste a sheet que tenha o botão com nome EXECUTAR.

Caso possam me ajudar, eu agradeço.

 
Postado : 13/11/2016 1:49 pm
(@edsonbr)
Posts: 0
New Member
 

Sugestão:

Sub GetSheets() 'Nome das Sheets
  Dim ws As Worksheet, btn As Excel.Button
  Dim i As Integer
  For Each ws In ThisWorkbook.Worksheets
    For Each btn In ws.Buttons
      If btn.Caption = "EXECUTAR" Then
        i = i + 1
        Worksheets("INDICE").Cells(i + 1, 1).Value = ws.Name
      End If
    Next btn
  Next ws
End Sub
 
Postado : 13/11/2016 8:42 pm
(@edcronos2)
Posts: 0
New Member
 

não seria bem mais simples e pratico ter uma celula de controle na aba?
tipo A1
assim ficaria facil varrer as abas listar e classificar facilmente cada uma delas
fora que vc pode querer fazer modificação nos controles futuramente

bem pelo menos é assim que eu faço

 
Postado : 14/11/2016 7:17 am