Usuário com melhor resposta
Listar Macros

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
-
segunda-feira, 6 de agosto de 2007 22:50Moderador
-
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
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 projetoOn 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:50Moderador
-
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