locked
Listar Macros RRS feed

  • Pergunta

  • Saudações colegas,

    Pesquisei uma referencia, mas não identifiquei uma forma de listar em uma combox/listbox as macros gravadas em um modulo, alguem poderia me orientar em como fazer isso?

    Grato.

    segunda-feira, 6 de agosto de 2007 14:42

Respostas

Todas as Respostas

  •  

    Boa tarde,

    Pode existir um método mais fácil, mas estou te enviando um exemplo de listar as linhas de código. Basta você filtrar o que quer encontrar e carregar a combobox.

     

    Primeiramente, insira uma combobox("cmbMacros") e um botão("cmdLoad") numa sheet("Sheet1").

     

    Crie esta sub no workbook:

    '----------------------------------------------------------------------------------------------------------------------------------------

    Public Sub LoadMacros()
    Dim comp As VBComponent     'declara components
    Dim intLine As Integer      'declara variavel para incrementar
    Dim vbProj As VBProject     'declara o projeto

    On Error GoTo ErrTR:

        Sheet1.cmbMacros.Clear  'limpa combox

        'faz o loop pelos components
        For Each comp In VBProject.VBComponents
           
            'Se o componente for um módulo - vc pode testar planilhas
            If comp.Type = 1 Then
                'para cada linha de codigo no modulo
                For intLine = 1 To comp.CodeModule.CountOfLines
               
                    'busca se existe na linha dcodigo as palavras 'Sub' ou 'Function'
                    If InStr(1, comp.CodeModule.Lines(intLine, 1), "Sub") Or _
                        InStr(1, comp.CodeModule.Lines(intLine, 1), "Function") Then
                       
                        'Caso encontre verifica se esta no inicio da frase e não está comentada
                        If Left(comp.CodeModule.Lines(intLine, 1), 3) = "Sub" Or _
                            Left(comp.CodeModule.Lines(intLine, 1), 7) = "Function" Or _
                            Left(comp.CodeModule.Lines(intLine, 1), 10) = "Public Sub" Or _
                            Left(comp.CodeModule.Lines(intLine, 1), 15) = "Public Function" Then
                                                                       
                            'Então adiciona ao combobox
                            Sheet1.cmbMacros.AddItem comp.CodeModule.Lines(intLine, 1)
                        End If
                    End If
                'move para proxima linha de codigo
                Next
            End If
        'move para proximo componente
        Next comp
    Exit Sub
       
    ErrTR:

        MsgBox Err.Number & " - " & Err.Description, vbCritical, "Erro encontrado"
       
    End Sub

    '----------------------------------------------------------------------------------------------------------------------------------------

     

    No evento click do Botão LoadMacros faça a chamada para carregar as macros.

     

    Exemplo:

     

    'Sheet1

    Private Sub cmdLoad_Click()

        Call ThisWorkbook.LoadMacros

    End Sub

    Poste qualquer dúvida.

     

    Abs,

    segunda-feira, 6 de agosto de 2007 19:29
  • segunda-feira, 6 de agosto de 2007 22:50
    Moderador
  • Uma solução alternativa também foi apresentada no http://forumaccess.com/eve/forums/a/tpc/f/364609431/m/8761097902 

     

    Obrigado pela atenção amigos.

    quinta-feira, 9 de agosto de 2007 17:58