Ir ao conteúdo
  • Cadastre-se
smartrading

Automatização de macro excell

Recommended Posts

 Boa noite pessoal

 

 

 Gostaria de uma ajuda dos colegas, tenho uma planilha do Excel alimentada por link DDE, onde os valores das células mudam automaticamente, criei uma macro para fazer uma função e gostaria de saber se tem como automatiza-la , ao invés de ter que apertar um botão qiuando a condição acontece a macro fazer a função automaticamente ,exemplo: quando aparecer o numero "1" na célula A1 execute a macro e quando aparecer o numero 1 na A2 execute outra macro preciso que ela faça isso o dia inteiro das 9 às 17 hs quando aparecer o numero 1 na A1 ou na A2. não sei se consegui ser claro. estou postando uma planilha Excel com a minha necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa inserir a macro na Worksheet e com a propriedade CHANGE, dentro dela você coloca essa sua função.

 

Assim, toda vez que houver uma alteração na sua planilha, essa função será executada. Independente se o valor foi alterado na A1 ou na AW5897.

 

Não sei se há uma maneiro menos pesada para o processador, mas é essa a forma que uso quando preciso (em raras exceções)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minoso na pratica como coloco esta função na minha macro ja pronta ?

 

preciso que esta função entenda que somente a celula A1 vai ser monitorada liga desliga a macro tipo 1 liga 0 desliga.

 

 

desde já agradeço sua atenção...

Compartilhar este post


Link para o post
Compartilhar em outros sites

 comecei a função change mas não consegui fazer com que a função entenda que somente se a celula 1 coluna 127 tendo o numero 1 executar a macro , por favor mandei um anexo do excell com a imagem da macro

 

 

obrigado amigos

Compartilhar este post


Link para o post
Compartilhar em outros sites
Bom dia,

 

Insira essa SUB na ABA da planilha a ser controlada as modificações. Clique com o botão direito e depois selecione Exibir Código.

 

Private Sub Worksheet_Change(ByVal faixa As Range)

    Dim monitorar As Range

' Informe aqui a célula ou intervalo de células a ser monitorada

    Set monitorar = Range("A4:A2000")

    If Not Intersect(faixa, monitorar) Is Nothing Then

         Call NOME_DA_MACRO

    End If

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sub compra1()

 

 

'   compra1 Macro

'

 

'

    Range("DS21:DX21").Select

    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

    Range("DS16:DX16").Select

    Selection.Copy

    Range("DS21").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Range("DS21").Select

    Application.CutCopyMode = False

    ActiveCell.FormulaR1C1 = "=R11C128-RC[5]"

    Range("DV18:DX19").Select

End Sub

 

 

 

 

 

esta é a macro e esta no modelo9 como faço para colocar a função indicada ????? detalhe a celula a monitorar é a celula DX1

 

desde já lhe agradeço a ajuda. estamos chegando lá

Compartilhar este post


Link para o post
Compartilhar em outros sites

Onde aparece o nome da planilha, tipo : PLAN1, PLAN2 e PLAN3 selecione a planilha que você quer controlar quando houver mudança e clique com o o botão direito do mouse em cima do nome da planilha, ao surgir um menu de opções, selecione a opção EXIBIR CÓDIGO, neste caso o Visual Basic vai abir direto a pasta de objetos da planilha. E cole o comando, não esqueça de fazer as alterações.

 

Private Sub Worksheet_Change(ByVal faixa As Range)
    Dim monitorar As Range
    Set monitorar = Range("A4:A2000") <<== ' Informe aqui a célula ou intervalo de células a ser monitorada
    If Not Intersect(faixa, monitorar) Is Nothing Then
         Call NOME_DA_MACRO <<== no seu caso Compra1
    End If
End Sub
 
Sempre que alguém alterar o conteúdo de alguma célula controlada, a sua Macro Compra1 será executada. Está macro pode estar em Módulo1, Módulo2 ou Módulo9 será executada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Private Sub Worksheet_Change(ByVal faixa As Range)
    Dim monitorar As Range
    Set monitorar = Range("dx1")
    If Not Intersect(faixa, monitorar) Is Nothing Then
         Call compra1
    End If
End Sub

Private Sub Worksheet_Change(ByVal faixa As Range)
    Dim monitorar As Range
    Set monitorar = Range("dx2")
    If Not Intersect(faixa, monitorar) Is Nothing Then
         Call venda1
         End If
End Sub

 

 

 

 

 

oi Kaleo , quando eu coloco dentro da celula dx1 o seguinte pedido =se(a1>b1;1;"") e dou enter para mudar de celula a macro executa 1 vez  , mas depois a configuração para de reconhecer o numero 1 que alterna entre 1 e celula vazia , tipo umas 5 vezes por minuto e a configuração não reconhece mudança na celula, percebi que se for uma mudança manual e der enter ela executa a macro mas com a mudança automatica na celula não esta rodando, outra coisa a mesma função vou utilizar na dx2 na linha de baixo e condição igual venda1 coloquei acima a configuração que me passou , volta uma mensagem dizendo "nome repetido encontrado worksheet_change"...

 

 

quase lá... obrigado pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não compreendi bem a sua explanação. Mas vamos lá.

 

Esse comando só funciona quando a célula sofre alguma alteração manual, teclando enter, tab ou del. Esse comando não pode ser repetido, se precisar controlar mais de uma células você precisa definir a célula inicial e a final, neste caso todas as células compreendidas entre a inicial e a final também serão controladas.

 

Portanto, se você precisa rodar a macro Compra1 ou Venda1 pelo valor da celula DX1 ou DX2 que tem formulá, não rola desta forma.

 

Private Sub Worksheet_Change(ByVal faixa As Range)
    Dim monitorar As Range
    Set monitorar = Range("dx1:dx2") <<== informa que o intervalo entre DX1 a DX2 será controloda
    If Not Intersect(faixa, monitorar) Is Nothing Then

         IF fazer um teste lógico pra saber qual célula estava THEN
              Call compra1

        ELSE

             Call venda1

       END IF
    End If
End Sub

 

No caso da DX1 e DX2 ter que ser por formulá altere a lógica ou a forma te obter o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 então Kaleo

 

Portanto, se você precisa rodar a macro Compra1 ou Venda1 pelo valor da celula DX1 ou DX2 que tem formulá, não rola desta forma.

 

 

exatamente isso que preciso pelo valor da celula.  se a celula alterar execute a macro... tem uma forma para isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi Kaleo , desde já lhe agradeço a força que tem me dado,vou colocar a planilha de forma simplificada e com comentarios na celula e no corpo da planilha , acho que tenho que mandar sem habilitar a macro ai você habilita ai ok , vamos ver como consigo te enviar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal preciso de uma programação para executar uma macro a partir de uma celula exemplo A1  caso a celula A1 sera alterada execute a macro x  , detalhe, para alterar esta celula A1 eu tenho um link dde com uma formula , ou seja nunca dou enter nem del nem tab na celula , ela é alterada atraves de outra celula. exemplo A5 a celula A5 manda um numero para a A1 o que preciso ; quando o numero 1 aparecer na celular A1 execute a macro. 

 

 

alguem pode me ajudar ? 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se ajuda.


Instale o código abaixo no módulo da planilha, assim:
1. copie o código daqui
2. clique com o direito na guia da planilha de interesse e escolha 'Exibir código'
3. cole o código na janela em branco que vai se abrir
4. feito! 'Alt+Q' para retornar para a planilha e testar

Private Sub Worksheet_Calculate() If [A1] = 1 Then MsgBox "o conteúdo de A1 é 1"End Sub


Faça os testes com o código acima e com a entrada DDE ativada. Se funcionar será exibida a caixa de mensagem. Nesse caso substitua o comando que exibe a caixa de mensagem pelo nome da sua macro, assim:

Private Sub Worksheet_Calculate() If [A1] = 1 Then NomeDaSuaMacroEnd Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites
Oi osvaldo , primeiro teste funcionou perfeito, no segundo com o nome da macro nao, parece daalgum erro estou enviando  a planillha me passe seu email osvaldo. desde ja lhe agradeço.

 

 

Private Sub Worksheet_Calculate()
 
 If [A1] = 1 Then compra1
 
 
End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites
Sub compra1()

'

    Range("F13:I13").Select

    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

    Range("F11:I11").Select

    Selection.Copy

    Range("F13").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Application.CutCopyMode = False

End Sub

 

Sub venda1()

'

    Range("J13:L13").Select

    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

    Range("J11:L11").Select

    Selection.Copy

    Range("J13").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Application.CutCopyMode = False

End Sub

 

Sub Inicio()

    Cells(1, 1).Select

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Disponibilize aqui no tópico o arquivo com os códigos instalados.

 

Não entendi o que você fez. Eu pedi o arquivo e você mandou 3 códigos sem o arquivo ...???

Qual a sua ideia? O que devo fazer com esses códigos? Dureza!

 

Ainda, no post #13 você informou que queria rodar a macro x, ou seja, uma macro, no entanto você colocou acima três códigos...??? Se "A1"=1 então você quer rodar qual dos três códigos acima?

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom dia osvaldo,quero rodar a macro compra1 , quero rodar a macro venda1 ,se  a1 for =1 execute macro compra1 se a1 for =0 execute macro venda1  quero comprar e vender de acordo com a celula a1 mas como falei esta celula é alimentada por link DDE , sofre açao por outras celulas . como faço ? onde fica este arquivo para eu colocar aqui ????   

Compartilhar este post


Link para o post
Compartilhar em outros sites

... como faço ? onde fica este arquivo para eu colocar aqui ????   

 

Veja o caminho abaixo da minha assinatura. O arquivo deverá conter todos os códigos que você utiliza ou que está tentando utilizar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Instale o código abaixo no lugar do anterior.

Private Sub Worksheet_Calculate() Application.EnableEvents = False  On Error Resume Next  If [A1] = 1 Then compra1  If [A1] = 0 Then venda1 Application.EnableEvents = True End Sub
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Osvaldo boa noite, o pregão já esta fechado mas fiz a alteração e deu certo com testes manuais ,amanha posto o resultado,e desde já deixo meus parabéns pelo seu conhecimento e sua entrega a ajudar a todos por aqui.   

Compartilhar este post


Link para o post
Compartilhar em outros sites

smartrading

 

Clique em curtir das respostas que te ajudaram.

 

Quando a dúvida estiver solucionada --> clique no botão Resolvido da resposta que atendeu a tua dúvida.

 

[]s

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×