Olá Novamente,
Com base no fórum montei um código para calcular o custo anual de água, luz, telefone, etc. são subformulários e um formulário que agrupa tudo acontece que nas tabelas tenho segundo o exemplo da tabela de custo de água onde Q representa a quantidade e C o custo nos campos:
Tabela com consumo e custo de água:
Campos: A_QJaneiro;A_QFevereiro ... A_QDezembro; A_QTotal;A_QMedia; A_CJaneiro;A_CFevereiro ... A_CDezembro; A_CTotal;A_CMedia;
No subformulário eu precisava que ao digitar a quantidade só fosse contada se também fosse digitado o valor correspondente no respectivo mês:
Criei um botão Calcular e de montei o código abaixo, sendo que tive muitos problemas com estouro de dados pois tinha que ter decimal e aceitar valores acima de 1milhão, notei primeiramente que meu erro era na tabela onde eu selecionei número para a quantidade mas deixei como inteiro e na verdade só consegui depois que mudei o tipo de todos os campos quantidade para double. No VBA eu estava cometendo o mesmo erro e não estava mostrando a soma dos decimais onde mudei os Integer para Double e resolveu.
Gostaria de ajuda para simplificar e diminuir o volume do código abaixo para aumentar a agilidade, caso tenha outra sugestão também será bem vinda.
Com base no fórum montei um código para calcular o custo anual de água, luz, telefone, etc. são subformulários e um formulário que agrupa tudo acontece que nas tabelas tenho segundo o exemplo da tabela de custo de água onde Q representa a quantidade e C o custo nos campos:
Tabela com consumo e custo de água:
Campos: A_QJaneiro;A_QFevereiro ... A_QDezembro; A_QTotal;A_QMedia; A_CJaneiro;A_CFevereiro ... A_CDezembro; A_CTotal;A_CMedia;
No subformulário eu precisava que ao digitar a quantidade só fosse contada se também fosse digitado o valor correspondente no respectivo mês:
Criei um botão Calcular e de montei o código abaixo, sendo que tive muitos problemas com estouro de dados pois tinha que ter decimal e aceitar valores acima de 1milhão, notei primeiramente que meu erro era na tabela onde eu selecionei número para a quantidade mas deixei como inteiro e na verdade só consegui depois que mudei o tipo de todos os campos quantidade para double. No VBA eu estava cometendo o mesmo erro e não estava mostrando a soma dos decimais onde mudei os Integer para Double e resolveu.
Gostaria de ajuda para simplificar e diminuir o volume do código abaixo para aumentar a agilidade, caso tenha outra sugestão também será bem vinda.
- Código:
Option Compare Database
Option Explicit
Function ContaMeses(argFrm As Form)
Dim CMeses As Double ' Conta os meses
' Atribui o valor 1 para cada mês onde está preenchido os campos quantidade e custo e 0 se alguns dos dois estiver vazio ou zerado.
Dim QJaneiro As Double
Dim QFevereiro As Double
Dim QMarco As Double
Dim QAbril As Double
Dim QMaio As Double
Dim QJunho As Double
Dim QJulho As Double
Dim QAgosto As Double
Dim QSetembro As Double
Dim QOutubro As Double
Dim QNovembro As Double
Dim QDezembro As Double
Dim SQuantidade As Double ' Soma da quantidade de cada mês
'Valor utilizado em água m³
Dim PJaneiro As Double
Dim PFevereiro As Double
Dim PMarco As Double
Dim PAbril As Double
Dim PMaio As Double
Dim PJunho As Double
Dim PJulho As Double
Dim PAgosto As Double
Dim PSetembro As Double
Dim POutubro As Double
Dim PNovembro As Double
Dim PDezembro As Double
Dim SCustos As Double ' Soma o custo
'Valor do custo mensal
Dim CJaneiro As Double
Dim CFevereiro As Double
Dim CMarco As Double
Dim CAbril As Double
Dim CMaio As Double
Dim CJunho As Double
Dim CJulho As Double
Dim CAgosto As Double
Dim CSetembro As Double
Dim COutubro As Double
Dim CNovembro As Double
Dim CDezembro As Double
If Me.A_VolumeJaneiro > 0 And Me.A_CustoJaneiro > 0 Then 'verifica se foi inserido algum valor maior que 0 em ambos os campos
QJaneiro = 1 'Adiciona 1 a contagem do respectivo mês se valor inserido em ambos os campos
PJaneiro = Me.A_VolumeJaneiro 'Soma o volume do respectivo mês se valor inserido em ambos os campos
CJaneiro = Me.A_CustoJaneiro 'Soma o custo do respectivo mês se valor inserido em ambos os campos
Else
QJaneiro = 0 'Adiciona 0 a contagem do respectivo mês se não valor inserido em ambos os campos
PJaneiro = 0 'Não Soma o volume do respectivo mês se valor não inserido em ambos os campos
CJaneiro = 0 'Não Soma o custo do respectivo mês se valor não inserido em ambos os campos
End If
If Me.A_VolumeFevereiro > 0 And Me.A_CustoFevereiro > 0 Then
QFevereiro = 1
PFevereiro = Me.A_VolumeFevereiro
CFevereiro = Me.A_CustoFevereiro
Else
QFevereiro = 0
PFevereiro = 0
CFevereiro = 0
End If
If Me.A_VolumeMarço > 0 And Me.A_CustoMarço > 0 Then
QMarco = 1
PMarco = Me.A_VolumeMarço
CMarco = Me.A_CustoMarço
Else
QMarco = 0
PMarco = 0
CMarco = 0
End If
If Me.A_VolumeAbril > 0 And Me.A_CustoAbril > 0 Then
QAbril = 1
PAbril = Me.A_VolumeAbril
CAbril = Me.A_CustoAbril
Else
QAbril = 0
PAbril = 0
CAbril = 0
End If
If Me.A_VolumeMaio > 0 And Me.A_CustoMaio > 0 Then
QMaio = 1
PMaio = Me.A_VolumeMaio
CMaio = Me.A_CustoMaio
Else
QMaio = 0
PMaio = 0
CMaio = 0
End If
If Me.A_VolumeJunho > 0 And Me.A_CustoJunho > 0 Then
QJunho = 1
PJunho = Me.A_VolumeJunho
CJunho = Me.A_CustoJunho
Else
QJunho = 0
PJunho = 0
CJunho = 0
End If
If Me.A_VolumeJulho > 0 And Me.A_CustoJulho > 0 Then
QJulho = 1
PJulho = Me.A_VolumeJulho
CJulho = Me.A_CustoJulho
Else
QJulho = 0
PJulho = 0
CJulho = 0
End If
If Me.A_VolumeAgosto > 0 And Me.A_CustoAgosto > 0 Then
QAgosto = 1
PAgosto = Me.A_VolumeAgosto
CAgosto = Me.A_CustoAgosto
Else
QAgosto = 0
PAgosto = 0
CAgosto = 0
End If
If Me.A_VolumeSetembro > 0 And Me.A_CustoSetembro > 0 Then
QSetembro = 1
PSetembro = Me.A_VolumeSetembro
CSetembro = Me.A_CustoSetembro
Else
QSetembro = 0
PSetembro = 0
CSetembro = 0
End If
If Me.A_VolumeOutubro > 0 And Me.A_CustoOutubro > 0 Then
QOutubro = 1
POutubro = Me.A_VolumeOutubro
COutubro = Me.A_CustoOutubro
Else
QOutubro = 0
POutubro = 0
COutubro = 0
End If
If Me.A_VolumeNovembro > 0 And Me.A_CustoNovembro > 0 Then
QNovembro = 1
PNovembro = Me.A_VolumeNovembro
CNovembro = Me.A_CustoNovembro
Else
QNovembro = 0
PNovembro = 0
CNovembro = 0
End If
If Me.A_VolumeDezembro > 0 And Me.A_CustoDezembro > 0 Then
QDezembro = 1
PDezembro = Me.A_VolumeDezembro
CDezembro = Me.A_CustoDezembro
Else
QDezembro = 0
PDezembro = 0
CDezembro = 0
End If
'soma os meses com valor 1 do if acima
CMeses = QJaneiro + QFevereiro + QMarco + QAbril + QMaio + QJunho + QJulho + QAgosto + QSetembro + QOutubro + QNovembro + QDezembro
' Soma o volume utilizado segundo o if acima
SVolume = PJaneiro + PFevereiro + PMarco + PAbril + PMaio + PJunho + PJulho + PAgosto + PSetembro + POutubro + PNovembro + PDezembro
' Soma o custo de cada mês segundo o if acima
SCustos = CJaneiro + CFevereiro + CMarco + CAbril + CMaio + CJunho + CJulho + CAgosto + CSetembro + COutubro + CNovembro + CDezembro
Me.A_CustoTotal = SCustos ' Insere no campo total o custo total
Me.A_VolumeTotal = SVolume ' Insere o volume total
Me.A_Meses = CMeses ' Soma os valores que correspondem ao meses
If CMeses > 0 Then ' caso nenhum dado seja inserido não faz a divisão por 0 e não dá erro nos cálculos das médias
Me.A_VolumeMedio = SVolume / CMeses
Me.A_CustoMedio = SCustos / CMeses
Else ' Atribui valor 0 caso a divisão seja por 0 ou não seja inserido valores
Me.A_VolumeMedio = 0
Me.A_CustoMedio = 0
End If
Me.Recalc ' Atualiza os cálculos do formulário
End Function
Private Sub btCalcularAgua_Click()
Call ContaMeses(Me)
End Sub