Notifications
Clear all

Inserir código em eventos de planilha

4 Posts
2 Usuários
0 Reactions
1,418 Visualizações
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
Topic starter
 

Senhores,

Como faço para inserir dinamicamente (em run time), via código VBA, códigos em um evento de planilha?

Por exemplo:
Preciso escrever um código VBA no meu arquivo chamado Envia.xlsm que insira no evento Change de um outro arquivo Excel aberto chamado Recebe.xlsm, um código que quando a célula B5 mudar o valor, a linha 5 seja colorida de amarelo.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 06/11/2019 12:47 pm
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
 

Wagner, se entendi você quer add Macros / Procedimentos em outro arquivo, se não for isso é só dizer.

Eu não sei se tem como add nos Eventos, eu já fiz isso mas adicionando Modulos e Macros, não tenho o exemplo aqui comigo, preciso procurar em casa, mas por hora de uma olhada no link abaixo, é todo sobre VBA projects, na época me basiei nele, quem sabe da uma luz, depois pesquiso sobre o Evento.

Ressaltando que para não dar erros precisa dessa biblioteca instalada (reference to the VBA Extensibility library), lembro que na época até fiz a rotina para verificar se estava instalada e se não tivesse habilitava.

Adding A Module To A Project
Adding A Procedure To A Module
Copy A Module From One Project To Another
Creating A New Procedure In A Code Module
Creating An Event Procedure
Deleting A Module From A Project
Deleting A Procedure From A Module
Deleting All VBA Code In A Project
Eliminating Screen Flicker When Working With The Visual Basic Editor
Exporting A VBComponent To A Text File
Listing All Procedures In A Module
Reading A Procedure Declaration
Renaming A Module
Searching A Module For Text
Testing If A VBCompoent Exists
Total Code Lines In A Component
Total Code Lines In A Project
Total Lines In A Project
Workbook Associated With A VBProject

http://www.cpearson.com/excel/vbe.aspx

Espero que ajude, se não me engano até postei a qui no Forum, mas não deve ter mais os anexos.

Mauro Coutinho

 
Postado : 06/11/2019 2:32 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
Topic starter
 

Bom dia Mauro!

Muito obrigado mesmo pela ajuda. Vou ler tudo sim com o maior cuidado. Vou ver se faz referência a inserção de código dentro de Eventos que é o que realmente preciso.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 07/11/2019 4:17 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
Topic starter
 

Mauro,

Mais, uma vez, muito obrigado por disponibilizar seu conhecimento. Graças a isso, consegui resolver o meu problema.

Para os demais integrantes do fórum que tiverem esse mesmo tipo de problema, segue, abaixo, um exemplo de rotina que insere no Evento Change da aba chamada Plan1 do próprio arquivo, um código simples que verifica se houve alteração da célula B5. Caso haja alteração nessa célula, é disparada uma mensagem de "Hello Word". Para inserir código em outro arquivo (que não o próprio) basta mudar a linha "Set VBProj = ActiveWorkbook.VBProject" para "Set VBProj = Workbooks ("nome_do_arquivo.xlsm").VBProject".

    Sub CreateEventProcedure()
        Dim VBProj As VBIDE.VBProject
        Dim VBComp As VBIDE.VBComponent
        Dim CodeMod As VBIDE.CodeModule
        Dim LineNum As Long

        Set VBProj = ActiveWorkbook.VBProject
        Set VBComp = VBProj.VBComponents("Plan1") 'Se for na Pasta, mudar aqui para EstaPasta_de_trabalho
        Set CodeMod = VBComp.CodeModule
        
        With CodeMod
            LineNum = .CreateEventProc("Change", "Worksheet") 'Se for na Pasta, mudar aqui para Workbook
            LineNum = LineNum + 1
            .InsertLines LineNum, "    If Target.Address (False, False) = " & """B5""" & "Then"
            LineNum = LineNum + 1
            .InsertLines LineNum, "        MsgBox " & """Hello World""" & ""
            LineNum = LineNum + 1
            .InsertLines LineNum, "    End If"
        End With
    End Sub

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 07/11/2019 10:54 am