MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Simplificação de código

    Compartilhe
    avatar
    jeanrocha
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 13/08/2013

    Simplificação de código

    Mensagem  jeanrocha em 27/11/2017, 17:53

    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.

    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
    avatar
    HARYSOHN
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12246
    Registrado : 01/03/2011

    Re: Simplificação de código

    Mensagem  HARYSOHN em 19/12/2017, 16:49

    Boas Jean. Poderia disponibilizar o form para que possmos ver isto?

    Saudações

    Harysohn


    .................................................................................
    PILOTO
    الله أكبر Paz, Justiça e Liberdade! الله أكبر
    CLIQUE AQUI E VEJA O VÍDEO >>> BIOMETRIA EM ACCESS

    Iniciando no Access? Então veja esse tópico e também esse


    BUSCA NO FÓRUM - CLIQUE AQUI!!!

    Quando tua dúvida for RESOLVIDA, dê retorno com AGRADECIMENTO a aqueles que gastaram seu tempo em te ajudar.
    Clique no botão Resolvido logo acima do botão Enviar, do lado direito. Todos nós agradecemos.  
    [Você precisa estar registrado e conectado para ver esta imagem.]
    avatar
    jeanrocha
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 13/08/2013

    Re: Simplificação de código

    Mensagem  jeanrocha em 30/12/2017, 02:21

    Segue em anexo o bd de exemplo.
    Desde já agradeço a atenção.
    O BD em anexo é um exemplo de cálculo de custo de produção para mudas somando os principais gastos mês a mês com quantidades.

    Precisa de algumas melhorias na automação mas foi o melhor que consegui com o tempo que eu tinha.

    Desde já agradeço. Caso queira deixar no repositório não há problema.
    Anexos
    Exemplo Custo de Produção.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (395 Kb) Baixado 10 vez(es)

      Data/hora atual: 21/11/2018, 12:31