Ir ao conteúdo
  • Cadastre-se
RocketR

Vba - excel não atualiza formula gerada na macro sozinho

Recommended Posts

Estou com um probleminha... Criei uma macro no excel para fazer cadastro de alunos em uma planilha através de um formulário.

Em determinado momento na macro, hora de fazer os registros dos dados do aluno, a macro gera e grava uma formula na nas celulas das colunas F e G, porém as formulas não executam sozinhas, só executam manualmente na base do F2+ENTER. Ao invéz de mostrar o resultado, a celula mostra a formula. Já tentei de tudo.. Já verifiquei se as celulas não estão formatadas como texto, já olhei em opções de cálculo e está tudo automático. Não sei mais o que fazer...

Trecho da macro que faz o registro:

If contador = 0 Then
                    totalregistro = Worksheets("plan1").UsedRange.Rows.Count + 1
                    TR = totalregistro
                    ND = Chr(34) & "" & Chr(34)
                    Cformula = "=SE(D" + TR + "=" + ND + ";" + ND + ";SE(E" + TR + "=" + ND + ";" + ND + ";((D" + TR + "+E" + TR + ")/2)))"
                    Cop = Cformula
                        With Worksheets("Plan1")
                            .Cells(totalregistro, 1) = Caluno
                            .Cells(totalregistro, 2) = Ccurso
                            .Cells(totalregistro, 3) = Cperiodo
                            .Cells(totalregistro, 6) = Cop
                            Cformula = "=SE(F" + TR + "=" + ND + ";" + Chr(34) + "Indefinido" + Chr(34) + ";SE(F" + TR + ">6;" + Chr(34) + "Aprovado" + Chr(34) + ";" + Chr(34) + "Reprovado" + Chr(34) + "))"
                            Cop = Cformula
                            .Cells(totalregistro, 7) = Cop
                            MsgBox "Aluno cadastrado com sucesso"
                            Cnome = ""
                        End With
                Else
                End If

As linhas que atribuem valor á "Cformula" é onde é gerada as formulas das colunas F e G. As formulas ficam da seguinte maneira:

Coluna F:

=SE(D2="";"";SE(E2="";"";((D2+E2)/2)))

(Linha 2 como exemplo)

 

Coluna G:

=SE(F2="";"Indefinido";SE(F2>6;"Aprovado";"Reprovado"))

(Linha 2 como exemplo também)

 

 

Não há nada de errado com as formulas, unico problema é que elas simplesmente não mostram o resultado automáticamente.

Segue em anexo uma imagem da planilha como fica.. a linha 2 foi a que eu dei F2+ENTER manualmente, e a linha 3 é como fica antes disso.

 

Obrigado!!

 

1.png

Editado por RocketR

Compartilhar este post


Link para o post
Compartilhar em outros sites

Duas sugestões:

 

A primeira seria deixar a formula ja digitada na planilha, deixe uma margem de segurança de acordo com o numero de alunos que você tem na escola. umas 100 linhas a mais é o suficiente.

 

A segunda você lança o valor inicial na celula e faz via vba a verificação da media conforme é alterado a planilha.

 

E por ultimo se você quiser inserir a formula pelo VBA siga os passos abaixo.


Inserir formulas por vba você deve utilizar em inglês, faz o seguinte use o gravador de macros com referencia relativa e insira sua formula manualmente vai obter o codigo para inserir a formula sem erros.

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@CasaDoHardware Muito obrigado mesmo cara, salvou! Sou novo aqui no fórum, mas me sinto muito bem vindo! 

 

O codigo ficou assim:

If contador = 0 Then
                    totalregistro = Worksheets("plan1").UsedRange.Rows.Count + 1
                        With Worksheets("Plan1")
                            .Cells(totalregistro, 1) = Caluno
                            .Cells(totalregistro, 2) = Ccurso
                            .Cells(totalregistro, 3) = Cperiodo
                            Range("F" & totalregistro).Select
                            ActiveCell.FormulaR1C1 = "=IF(RC[-2]="""","""",IF(RC[-1]="""","""",((RC[-2]+RC[-1])/2)))"
                            Range("G" & totalregistro).Select
                            ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",""Indefinido"",IF(RC[-1]>=6,""Aprovado"",""Reprovado""))"
                            MsgBox "Aluno cadastrado com sucesso"
                            Cnome = ""
                        End With
                Else
                End If

 

 

Maravilha! Segui seu conselho e usei o gravador de macro com referencia relativa e voilá! Está tudo funcionando muito bem!

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

×