Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

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

Link para o comentário
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
Link para o comentário
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!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...