Ir ao conteúdo

Excel ativar formula usando macro


Ir à solução Resolvido por Nicelio,

Posts recomendados

Postado

  Boa tarde!

Será que vocês podem me ajudar

 

Ja fiquei um tempao procurando na internet a solucao

 

Estou procurando ativar uma formula utilizando o vba,    a formula está armazenada em forma de texto.

fiz assim: concatenei as celulas A1até F1 e o resultado foi esse:  =A1+B1, ou seja, o texto de uma formula.

Faço a macro pegando  esse resultado e colando em forma de texto   noutra celula, daí clico na barra de formulas e teclo enter, entao esse texto é ativado .  Ao clicar na barra de formulas e teclar enter o excel entende que nao é um texto e sim uma formula , entao calcula.

 

Até aí tudo bem , a questao é que eu preciso mudar esse sinal de + por -,na celula que contem esse sinal,     outra hora por >.  Só que o excel , quando eu clico no campo de formulas e teclo enter, gravando a macro, ele estabelece e fixa o sinal + na macro , daí se na planilha eu mudar para o sinal - ,  e rodar a macro, nao vai ser considerado o sinal -  , mas o + , porque ficou fixado no texto da macro.

 

por eu nao saber a macro certo ,tenho que fazer manualmente, centenas de vezes.

 

Se souberem me ajudar desde ja agradesço

 

 

Postado

Bem vindo ao fórum, @Nicelio

Não entendi muito bem sua necessidade, talvez se você anexasse aqui um arquivo ilustrando seu problema e a forma que gostaria que ficasse facilitaria quem fosse ajudar.

Mas façamos uma tentativa:

Uma maneira de você pegar uma fórmula que está na forma de texto numa célula, digamos A2 ("= A1+B1" ) e colocá-la como uma fórmula operante numa outra célula, digamos A3 através do VBA poderia ser:

Sub TextoParaFórmula()
  [A3].Formula = [A2].Value
End Sub

Se você quer substituir o sinal de adição por outro operador, poderia ser, por exemplo:

Sub TextoParaFórmula()
  [A3].Formula = Replace([A2].Value, "+", "-")
End Sub

 

  • Obrigado 1
Postado
19 horas atrás, Nicelio disse:

  ... concatenei as celulas A1até F1 e o resultado foi esse:  =A1+B1 ...

Concatenar A1:F1 deveria resultar em 6 elementos, no entanto o seu resultado apresenta somente 4 elementos (=A1+B1). Isso significa que há 2 células vazias naquele intervalo ? Se sim, quais ?

 

 

 ... a questao é que eu preciso mudar esse sinal de + por -,na celula que contem esse sinal,     outra hora por >. 

Sugestão: disponibilize uma amostra do seu arquivo Excel com alguns exemplos que representem TODAS as variações possíveis de ocorrerem e coloque na própria planilha os respectivos resultados esperados para cada exemplo.

 

 

Segue uma ideia.

Instale uma cópia do código abaixo no módulo da planilha de interesse.

funcionamento - após inserir conteúdo manualmente em qualquer célula de A1:F1, o código irá lançar automaticamente o resultado em H1.

Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, [A1:F1]) Is Nothing Then Exit Sub
 [H1] = WorksheetFunction.IfError(Evaluate([A1&B1&C1&D1&E1&F1]), "ERRO")
End Sub

 

Postado
Em 17/02/2020 às 08:10, Edson Luiz Branco disse:

Bem vindo ao fórum, @Nicelio

Não entendi muito bem sua necessidade, talvez se você anexasse aqui um arquivo ilustrando seu problema e a forma que gostaria que ficasse facilitaria quem fosse ajudar.

Mas façamos uma tentativa:

Uma maneira de você pegar uma fórmula que está na forma de texto numa célula, digamos A2 ("= A1+B1" ) e colocá-la como uma fórmula operante numa outra célula, digamos A3 através do VBA poderia ser:


Sub TextoParaFórmula()
  [A3].Formula = [A2].Value
End Sub

Se você quer substituir o sinal de adição por outro operador, poderia ser, por exemplo:


Sub TextoParaFórmula()
  [A3].Formula = Replace([A2].Value, "+", "-")
End Sub

 

 

Em 17/02/2020 às 08:10, Edson Luiz Branco disse:

Bem vindo ao fórum, @Nicelio

Não entendi muito bem sua necessidade, talvez se você anexasse aqui um arquivo ilustrando seu problema e a forma que gostaria que ficasse facilitaria quem fosse ajudar.

Mas façamos uma tentativa:

Uma maneira de você pegar uma fórmula que está na forma de texto numa célula, digamos A2 ("= A1+B1" ) e colocá-la como uma fórmula operante numa outra célula, digamos A3 através do VBA poderia ser:


Sub TextoParaFórmula()
  [A3].Formula = [A2].Value
End Sub

Se você quer substituir o sinal de adição por outro operador, poderia ser, por exemplo:


Sub TextoParaFórmula()
  [A3].Formula = Replace([A2].Value, "+", "-")
End Sub

 

Boa tarde Edson!

 

eu consegui resolver meu problema  com este código que achei de ontem pra hoje

Sub codigo1()

SendKeys "{F2}"

SendKeys "{ENTER}"

End Sub

 

pode ser que tem o mesmo resultado do codigo que você informou, mas vou estudar o vba que você passou.

É a primeira vez que participo do fórum e vocês foram muito legais.

Vou procurar retribuir.   

Agradeço, brigado!

adicionado 16 minutos depois
Em 17/02/2020 às 08:27, osvaldomp disse:

 

Segue uma ideia.

Instale uma cópia do código abaixo no módulo da planilha de interesse.

funcionamento - após inserir conteúdo manualmente em qualquer célula de A1:F1, o código irá lançar automaticamente o resultado em H1.


Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, [A1:F1]) Is Nothing Then Exit Sub
 [H1] = WorksheetFunction.IfError(Evaluate([A1&B1&C1&D1&E1&F1]), "ERRO")
End Sub

 

Boa tarde Osvaldo!

 

eu consegui resolver meu problema  com este código que achei de ontem pra hoje

Sub codigo1()

SendKeys "{F2}"

SendKeys "{ENTER}"

End Sub

 

Eu coloquei um caracter, uma letra em cada celula , então ficou seis elementos.

vou estudar o código que você  passou , pode ser melhor, pode servir.

 

Mas muito obrigado .  grande abraço

 

Postado
Em 17/02/2020 às 08:27, osvaldomp disse:

 

Segue uma ideia.

Instale uma cópia do código abaixo no módulo da planilha de interesse.

funcionamento - após inserir conteúdo manualmente em qualquer célula de A1:F1, o código irá lançar automaticamente o resultado em H1.


Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, [A1:F1]) Is Nothing Then Exit Sub
 [H1] = WorksheetFunction.IfError(Evaluate([A1&B1&C1&D1&E1&F1]), "ERRO")
End Sub

 

Olá!      bom dia 

eu resolvi voltar aqui pra tentar aproveitar esses codigos que vocês passaram, porque embora o sendkeys transforma o texto em formula, o sendkeys tem alguns problemas e eu nao sabia.

Portanto estava estudando esse codigo de Private sub  , achei ele muito bom porque acho que ele concatena os itens e ja transforma em formula e ja dá o resultado.  

Eu coloquei ele numa planilha qualquer e apliquei no exemplo que disse, mas deu um erro de fim de instrução.

Será que é assim mesmo

  

adicionado 25 minutos depois
Em 17/02/2020 às 08:10, Edson Luiz Branco disse:

Bem vindo ao fórum, @Nicelio

Não entendi muito bem sua necessidade, talvez se você anexasse aqui um arquivo ilustrando seu problema e a forma que gostaria que ficasse facilitaria quem fosse ajudar.

Mas façamos uma tentativa:

Uma maneira de você pegar uma fórmula que está na forma de texto numa célula, digamos A2 ("= A1+B1" ) e colocá-la como uma fórmula operante numa outra célula, digamos A3 através do VBA poderia ser:


Sub TextoParaFórmula()
  [A3].Formula = [A2].Value
End Sub

Se você quer substituir o sinal de adição por outro operador, poderia ser, por exemplo:


Sub TextoParaFórmula()
  [A3].Formula = Replace([A2].Value, "+", "-")
End Sub

 

Olá,      bom dia!

Eu estou tentando aproveitar esse codigo que você passou, porque o sendkeys transforma o texto em formula mas pra muitas celulas (acho que se diz loop) domora muito,  e ele é calculado por ultimo em realação à outras macros, parece que não importa a ordem que esteja. Eu tinha testado o sendkeys e antes de aplicar ao trabalho respondi ao forum. 

 

O codigo que você passou funcionou no exemplo que eu disse,  mas quando eu coloquei no trabalho, que é o resultado de um concatenar e esse resultado é o texto de uma função "SE",  ocorreu um erro de definição de aplicativo ou de definição de objeto.

 

Quando o resultado do concatenar é o texto de uma soma ou subtração, dá certo.  Mas quando o resultado do concatenar é o texto de uma funcão "SE" que tem uma palavra no texto, então não da certo.

 

Será que tem que usar outra palavra em vez de "Value" ?

 

Postado
55 minutos atrás, Nicelio disse:

...Quando o resultado do concatenar é o texto de uma soma ou subtração, dá certo.  Mas quando o resultado do concatenar é o texto de uma funcão "SE" que tem uma palavra no texto, então não da certo.

Por isso é importante sempre disponibilizar uma amostra de tudo aquilo que você está pretendendo, pois agora você inseriu elemento novo que não estava em sua demanda inicial.

No código que passei anteriormente, usei a propriedade .Formula, que funciona muito bem  no caso de uma operação matemática simples como adição/subtração de células, etc.

Como agora você estará usando  função SE(, teria que ou entrar com ela traduzida para inglês ou mudar a propriedade para .FormulaLocal.

[A3].FormulaLocal = [A2].Value

Mas o ideal mesmo seria você anexar um arquivo e explicar exatamente o que está precisando fazer, pois esse processo todo que você está fazendo de concatenar pedaços de fórmulas espalhadas em diversas células para depois transformar isso em resultado é algo bastante incomum e talvez possa ser realizado de forma mais rápida e menos trabalhosa.

  • Obrigado 1
Postado
2 minutos atrás, Edson Luiz Branco disse:

Por isso é importante sempre disponibilizar uma amostra de tudo aquilo que você está pretendendo, pois agora você inseriu elemento novo que não estava em sua demanda inicial.

No código que passei anteriormente, usei a propriedade .Formula, que funciona muito bem  no caso de uma operação matemática simples como adição/subtração de células, etc.

Como agora você estará usando  função SE(, teria que ou entrar com ela traduzida para inglês ou mudar a propriedade para .FormulaLocal.


[A3].FormulaLocal = [A2].Value

Mas o ideal mesmo seria você anexar um arquivo e explicar exatamente o que está precisando fazer, pois esse processo todo que você está fazendo de concatenar pedaços de fórmulas espalhadas em diversas células para depois transformar isso em resultado é algo bastante incomum e talvez possa ser realizado de forma mais rápida e menos trabalhosa.

Ok Edson!   vou só ver se essa solução nova que você mandou fica boa,  e ja disponibilizo uma  amostra.

 

Postado
1 hora atrás, Nicelio disse:

Eu coloquei ele numa planilha qualquer e apliquei no exemplo que disse, mas deu um erro de fim de instrução.

Será que é assim mesmo

 

 

Reforçando a sugestão do Mestre Edson: disponibilize o seu arquivo Excel com o código que passei instalado e explique com exatidão o que você quis dizer com "deu um erro de fim de instrução".

Postado

eu testei o código .FormulaLocal mas acho que não deu certo.

 

Estou mandando uma planilha amostra que contem a base do processo todo .

 

eu vou pegar esse resultado transformado em fórmula e calculado, copiar e colar (via macro) pra cinquenta celulas na mesma coluna,       o  sendkeys não serviu porque a macro copiar o resultado já calculado é executada primeiro e só depois o sendkeys age, ele age por ultimo de todas as macros.

 

 

ativar formula por macro.xlsx

adicionado 10 minutos depois
8 minutos atrás, osvaldomp disse:

 

Reforçando a sugestão do Mestre Edson: disponibilize o seu arquivo Excel com o código que passei instalado e explique com exatidão o que você quis dizer com "deu um erro de fim de instrução".

Ok Osvaldo,    obrigado ,  muito bom dia!

 

eu mandei uma amostra ,  que contém  a base do processo e  vou mandar mais outra amostra desta vez com o código que você passou.

adicionado 50 minutos depois

arquivos xlsm não podem ser anexados, mas o código que coloquei nessa planilha amostra ficou assim, tudo na mesma linha: 

 

Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, [A1:L1]) Is Nothing Then Exit Sub [O1] = WorksheetFunction.IfError(Evaluate([A1&B1&C1&D1&E1&F1&G1&H1&I1&J1&L1]), "ERRO") End Sub

Postado
2 horas atrás, Nicelio disse:

arquivos xlsm não podem ser anexados, ... ~~~> veja a dica abaixo da minha assinatura 😉

 

Instale uma cópia do código abaixo no módulo da planilha formula, assim:
1. copie o código daqui
2. clique com o direito na guia daquela planilha 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_Change(ByVal Target As Range)
 If Intersect(Target, [A1:L1,A5:B5]) Is Nothing Then Exit Sub
 [N1].FormulaLocal = WorksheetFunction.Concat(Range("A1:L1"))
End Sub

funcionamento - ao alterar manualmente o conteúdo de alguma célula em A1:L1 ou em A5:B5 o código irá lançar em N1 a fórmula resultante da concatenação.

 

obs. em função das suas fórmulas em E1 e E5, a fórmula resultante da concatenação retornará sempre a expressão "tudo bem", ou seja, independente dos valores em A5 e B5, o resultado sempre será igual ... não entendi qual o seu objetivo 🤔

Postado

Graças a Deus

Osvaldo muito obrigado
Edsom muito obrigado

Deus que dê mais sabedoria a vocês

porque eu não saberia resolver sozinho e teria que fazer centenas de vezes manualmente gastando varios dias

eu já tinha pequisado bastante na internet e não tinha entendido

mas agora eu coloquei o código na planilha do trabalho e deu certo , já rodei as macro e não vi nada errado  

os valores em A5 e B5 estavam representando outro intervalo

prestei atenção no código e fiz os ajustes testando,

o código final ficou assim:


Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, [FA14:FA28,FF2:FI4]) Is Nothing Then Exit Sub
 [EA2].FormulaLocal = WorksheetFunction.Concat(Range("FA14:FA28"))


Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, [FV14:FV28,FF2:FI4]) Is Nothing Then Exit Sub
 [EB2].FormulaLocal = WorksheetFunction.Concat(Range("FV14:FV28"))

End Sub


Obrigado!

Pretendo procurar ajudar também


 

  • Curtir 1
  • Solução
Postado
4 horas atrás, osvaldomp disse:

 

Instale uma cópia do código abaixo no módulo da planilha formula, assim:
1. copie o código daqui
2. clique com o direito na guia daquela planilha 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_Change(ByVal Target As Range)
 If Intersect(Target, [A1:L1,A5:B5]) Is Nothing Then Exit Sub
 [N1].FormulaLocal = WorksheetFunction.Concat(Range("A1:L1"))
End Sub

funcionamento - ao alterar manualmente o conteúdo de alguma célula em A1:L1 ou em A5:B5 o código irá lançar em N1 a fórmula resultante da concatenação.

 

obs. em função das suas fórmulas em E1 e E5, a fórmula resultante da concatenação retornará sempre a expressão "tudo bem", ou seja, independente dos valores em A5 e B5, o resultado sempre será igual ... não entendi qual o seu objetivo 🤔

4 horas atrás, osvaldomp disse:

 

Instale uma cópia do código abaixo no módulo da planilha formula, assim:
1. copie o código daqui
2. clique com o direito na guia daquela planilha 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_Change(ByVal Target As Range)
 If Intersect(Target, [A1:L1,A5:B5]) Is Nothing Then Exit Sub
 [N1].FormulaLocal = WorksheetFunction.Concat(Range("A1:L1"))
End Sub

funcionamento - ao alterar manualmente o conteúdo de alguma célula em A1:L1 ou em A5:B5 o código irá lançar em N1 a fórmula resultante da concatenação.

 

obs. em função das suas fórmulas em E1 e E5, a fórmula resultante da concatenação retornará sempre a expressão "tudo bem", ou seja, independente dos valores em A5 e B5, o resultado sempre será igual ... não entendi qual o seu objetivo 🤔

Ham  claro!     Acho que tem marcar um check de  resolvido ou mencionar aqui. Lá ta escrito resolvido, parece que o moderador já marcou.

Mas o tópico foi resolvido, a possibilidade foi encontrada.

Vou conferir se está marcado o tópico como resolvido.

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!