Jump to content

soma em vba


Recommended Posts

aconcelho-o a usar textbox.

e vai ficar assim:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = Val(TextBox2.Text) + Val(TextBox3.Text)
End Sub

E agora sempre que carregr no botão 1 automaticamente soma a textbox1.text à textbox2.text e aparece na textbox3.text.

É isto que tu querias?? (desculpa ter te tratado por tu)

Xau e espero ter ajudado.

Learning

  • VB.Net
  • HTML
  • C/C++

Link to comment
Share on other sites

Vou por para soma e para tudo:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = Val(TextBox2.Text) + Val(TextBox3.Text)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        TextBox1.Text = Val(TextBox2.Text) - Val(TextBox3.Text)
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        TextBox1.Text = Val(TextBox2.Text) * Val(TextBox3.Text)
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        TextBox1.Text = Val(TextBox2.Text) / Val(TextBox3.Text)

Já lhe fiz quase o projecto. LOL

Se quiser o botão "c" o botao para limpar tudo é:

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
    End Sub

Agora so e preciso adicionar os botoes e as textboxs

Learning

  • VB.Net
  • HTML
  • C/C++

Link to comment
Share on other sites

tem uma forma mais fácil....  pelo menos eu acho...

C1=A1+B1

portanto isso ficaria assim

activesheet.cells(linha,coluna).value=activesheet.cells(linha,coluna).value+activesheet.cells(linha,coluna).value

ficando a soma na seguinte forma:

ActiveSheet.Cells(1, 3).Value = ActiveSheet.Cells(1, 1).Value + ActiveSheet.Cells(1, 2).Value

Creio que seja a forma mais fácil

🙂😛

Link to comment
Share on other sites

tem uma forma mais fácil....  pelo menos eu acho...

Mais fácil do que isto? 😕

[c3] = [a1] + [a2]

obrigada a todos e não faz mal tratares-me por tu 🙂 utilizei a maneira do rogi_cps só mais uma coisa quando as células a1 e a2 não tem-em valores a celula c3 tem la um zero não ha maneira de tirar de la o zero?

Mostra lá como estás a utilizar.

Link to comment
Share on other sites

Jorge....  creio que na proposta de fazer em VBA seria a mais fácil, e que na verdade é a mesma coisa que apresentou, somente posta em linguagem...  e creio que, pelo menos os motivos que eu teria para fazer em VBA, é que não aparece fórmulas nas células, e não precisa na verdade de senhas para colocar...  isso evita a cópia ou melhor dizendo, proteção melhor para sua planilha, pois como bem sabemos, tem muitos prg para quebrar senhas que colocamos em planilhas eletrônicas...  bem ocmo para outros arquivos...  esse é o motivo pelo qual procuro usar fórmulas em VBA, e talvez seja exatamente isso que nosso amigo procura...

Para retirar o valor zero...  coloque um if após...  do tipo if cel=0, então valor =""

após a soma...  assim

if activesheet.cells(1,3).value=0 then
     activesheet.cells(1,3).value=""
end if

vamos a segunda parte....  para você fazer de a1 até a20, creio que poderia fazer um loop para isso criando variáveis X para coluna, na qual ela seria um contador e soma-se os valores linhas por linhas... 

'define variáveis
dim X
dim Valor

x=1

'loop enquanto a célula não for vazia
do while activesheet.cells(1,x).value+valor<>""
valor=activesheet.cells(1,x).value+valor
x=x+1
loop

'como célula 21 está vazia, carrega valor para ela.
'aki pode definir a célua correta que quer o valor.
activesheet.cells(1,x).value=valor

segunda opção seria a seguinte...  chamar a fórmula de soma via VBA....

cumps  😁

Link to comment
Share on other sites

Jorge....  creio que na proposta de fazer em VBA seria a mais fácil, e que na verdade é a mesma coisa que apresentou, somente posta em linguagem... 

Ah, não fiz entender 😕

O que estou a mostrar é VBA, e não formulas 🙂 Em VBA podemos indicar entre parenteses rectos qual a célula e não utilizando o métodos .Cells(1,3) que obriga a verifica qual o número para a coluna.

Ou seja, isto funciona:

 
Private Sub Worksheet_Change(ByVal Target As Range)
    [c3] = [a1] + [a2]
End Sub

No caso de se utilizar dessa forma, é mais fácil no entanto indicar a letra e não o número da coluna:

 
Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveSheet.Cells(1, "C").Value = ActiveSheet.Cells(1, "A").Value + ActiveSheet.Cells(2, "A").Value
End Sub

No entanto o que eu entendi, é que se um valor for estiver em branco, o resultado será 0, e é isso que se quer evitar. Isso pode-se fazer simplesmente com uma instrução IF()

Outra coisa que deve contemplar é garantir que o código apenas é executado quando se alteram as células que influenciam o resultado. Por exemplo, se alterar a célula X10 porquê actualizar o resultado? Não faz sentido e torna o Excel mais lento (se forem muitos calculos pode tornar mesmo muito mais lento).

Um versão final seria:

 
Private Sub Worksheet_Change(ByVal Target As Range)
Dim total As Double
On Error Resume Next
    ' Verifica se as células alteradas são as que queremos apenas
    If Not Application.Intersect([a1:a2], Target) Is Nothing Then
    
        ' Calcula o resultado
        total = [a1] + [a2]
        
        ' Mostra o resultado ou um espaço em branco
        If total = 0 Then
            [c3] = ""
        Else
            [c3] = total
        End If
        
    End If
    
End Sub
Link to comment
Share on other sites

Realmente Jorge,  eu nunca tentei usar dessa forma.. e sua forma realmente é muito mais fácil e recomendo o uso.

Mas gostaria de saber uma coisa.....  não me lembro antigamente se conseguir usar o chamamendo da célula direta no vba através de colchetes....  isso foi implantado em alguma versão, ou apenas quem me ensinou também não deveria saber disso??

Isso funciona com todas as versões do office??

Quando colocou isso, eu juro que achei que esva a fazer formulação direta para célula....  me desculpe...  com esse ensinamento ficou muito mais claro.

Valeu por compartilhar conhecimento!1

cumps

Link to comment
Share on other sites

Mas gostaria de saber uma coisa.....  não me lembro antigamente se conseguir usar o chamamendo da célula direta no vba através de colchetes....  isso foi implantado em alguma versão, ou apenas quem me ensinou também não deveria saber disso??

Isso funciona com todas as versões do office??

Provavelmente ele não sabia porque desde a versão 2000 se pode usar (não testei em anteriores). 😛

Link to comment
Share on other sites

Ah, não fiz entender 😛

O que estou a mostrar é VBA, e não formulas 👍 Em VBA podemos indicar entre parenteses rectos qual a célula e não utilizando o métodos .Cells(1,3) que obriga a verifica qual o número para a coluna.

Ou seja, isto funciona:

 
Private Sub Worksheet_Change(ByVal Target As Range)
    [c3] = [a1] + [a2]
End Sub

No caso de se utilizar dessa forma, é mais fácil no entanto indicar a letra e não o número da coluna:

 
Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveSheet.Cells(1, "C").Value = ActiveSheet.Cells(1, "A").Value + ActiveSheet.Cells(2, "A").Value
End Sub

No entanto o que eu entendi, é que se um valor for estiver em branco, o resultado será 0, e é isso que se quer evitar. Isso pode-se fazer simplesmente com uma instrução IF()

Outra coisa que deve contemplar é garantir que o código apenas é executado quando se alteram as células que influenciam o resultado. Por exemplo, se alterar a célula X10 porquê actualizar o resultado? Não faz sentido e torna o Excel mais lento (se forem muitos calculos pode tornar mesmo muito mais lento).

Um versão final seria:

 
Private Sub Worksheet_Change(ByVal Target As Range)
Dim total As Double
On Error Resume Next
    ' Verifica se as células alteradas são as que queremos apenas
    If Not Application.Intersect([a1:a2], Target) Is Nothing Then
    
        ' Calcula o resultado
        total = [a1] + [a2]
        
        ' Mostra o resultado ou um espaço em branco
        If total = 0 Then
            [c3] = ""
        Else
            [c3] = total
        End If
        
    End If
    
End Sub

Olá então como seria se eu quisse-se fazer o somatório desde da célula a1 até a a20 por ex:

Link to comment
Share on other sites

O meu jeito de fazer ue passei pra vc....  somente substituindo a o numero da coluna por uma letra e fazendo um loop...

Quanto ao jeito do orge.. eu não consegui fazer...  MAs gostaria de saber como fazer desse outro jeito tb.

Link to comment
Share on other sites

perae...  deixa ver se eu entendi...  oq ue vc passou é a1=a2+a3....  certo..  a partir do ponto que inforomou.. como faz para que a soma seja de a2 até a20.  Se eu mudar a última, apenas somo um mais o outro e não a range de células.,,  Não consegui fazer a1=a2:a20, que seria a fórluma para excel.

Link to comment
Share on other sites

:chase:

Permitam-me...

Aplicando o exemplo já mostrado de uma outra maneira, eis uma alternativa.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim total As Double
On Error Resume Next
    ' Verifica se as células alteradas são as que queremos apenas
   If Not Application.Intersect([a1:a20], Target) Is Nothing Then
    
        ' Calcula o resultado
       total = Application.WorksheetFunction.Sum(Range("A1:A20"))
        
        ' Mostra o resultado ou um espaço em branco
       If total = 0 Then
            [c3] = ""
        Else
            [c3] = total
        End If
        
    End If
    
End Sub

🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.