MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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


2 participantes

    Problemas com o módulo vba_access

    avatar
    Alcimere
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 4
    Registrado : 05/07/2015

    Problemas com o módulo vba_access Empty Problemas com o módulo vba_access

    Mensagem  Alcimere 5/7/2015, 16:15

    Pessoal, bom dia

    sou nova no grupo e também em programação VBA.. NA vdd uso o access ha bastante tempo, mas não me aventurava a utilizar os módulos, pois não sou programadora.

    Fiz alguns cursos online, baixei apostilas, enfim, estou tentando. Neste momento, estou trabalhando em um módulo, que precisa identificar os valores > 1, para o campo Resultado. No caso de não encontrar, inclui uma função Soma, na qual ele somaria um ou mais campos, até que o valor fosse >=1. Por último, ele traria o resultado das somatórias.

    Em outra parte do programa, irei montar uma estratégia para cada resultado, mas, apesar de não ter problemas de sintexe, o modulo não traz o resultado dentro da consulta.

    Public Function ResultadoSQL() As Variant

    Dim db As DAO.Database
    Dim rs As DAO.Recordset

    Set db = CurrentDb()

    Dim Master_Visa As Double
    Dim Agiplan_VISA As Double
    Dim Banescard_VISA As Double
    Dim Credis_VISA As Double
    Dim CREDZ_VISA As Double
    Dim VISA_015 As Double
    Dim VISA_023 As Double
    Dim VISA_029 As Double
    Dim VISA_064 As Double

    Dim Resultado As Variant

    If Master_Visa >= 1 Then Resultado = "Master_Vista" Else
    If Agiplan_VISA >= 1 Then Resultado = "Agiplan_Visa" Else
    If Banescard_VISA >= 1 Then Resultado = "Banescard_Visa" Else
    If Credi_Visa >= 1 Then Resultado = "Credi_Visa" Else
    If CREDZ_VISA >= 1 Then Resultado = "CREDZ_VISA" Else
    If VISA_015 >= 1 Then Resultado = "015_Visa" Else
    If VISA_023 >= 1 Then Resultado = "023_Visa" Else
    If VISA_029 >= 1 Then Resultadao = "029_Visa" Else
    If VISA_064 >= 1 Then Resultado = "064_Visa"


    End Function

    Sub Adição()
    soma = Master_Visa + Agiplan_VISA
    If (soma >= 1) Then Resultado = "Master_Visa + Agiplan_Visa" Else
    soma = Master_Visa + Agiplan_VISA + Banescard_VISA
    If (soma >= 1) Then Resultado = "Master_Visa + Agiplan_Visa + Banescard" Else
    soma = Master_Visa + Agiplan_VISA + Banescard_VISA + Credi_Visa
    If (soma >= 1) Then Resultado = "Master + Agiplan + Banecard + Credi" Else
    soma = Master_Visa + Agiplan_VISA + Banescard_VISA + Credi_Visa + CREDZ_VISA
    If (soma >= 1) Then Resultado = "Master + Agiplan + Banescard + credi + CREDZ" Else
    soma = Master_Visa + Agiplan_VISA + Banescard_VISA + Credi_Visa + CREDZ_VISA + VISA_015
    If (soma >= 1) Then Resultado = "Master + Agiplan + Banescard + Credi + CREDZ + Visa_015" Else
    soma = Master_Visa + Agiplan_VISA + Banescard_VISA + Credi_Visa + CREDZ_VISA + VISA_015 + VISA_023
    If (soma >= 1) Then Resultado = "Master + Agiplan + Banescard + Credi + CREDZ + Visa_015+ Visa_023" Else
    soma = Master_Visa + Agiplan_VISA + Banescard_VISA + Credi_Visa + CREDZ_VISA + VISA_015 + VISA_023 + VISA_029
    If (soma >= 1) Then Resultado = "Master + Agiplan + Banescard + Credi + CREDZ + Visa_015+ Visa_023+ VISA_029" Else
    soma = Master_Visa + Agiplan_VISA + Banescard_VISA + Credi_Visa + CREDZ_VISA + VISA_015 + VISA_023 + VISA_029 + VISA_064
    If (soma >= 1) Then Resultado = "Master + Agiplan + Banescard + Credi + CREDZ + Visa_015+ Visa_023+ VISA_029+ VISA_064" Else
    soma = Master_Visa + Agiplan_VISA + Banescard_VISA + Credi_Visa + CREDZ_VISA + VISA_015 + VISA_023 + VISA_029 + VISA_064
    If (soma < 1) Then Resultado = "TODAS"
    End Sub


    Agradeço muito a ajuda,

    abs
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    Problemas com o módulo vba_access Empty Re: Problemas com o módulo vba_access

    Mensagem  Alexandre Neves 5/7/2015, 20:51

    Boa noite, e bem-vinda ao fórum
    A função não tem argumentos?
    O recordset não está iniciado nem é chamado
    Explique com detalhe o que pretende com a função


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    Alcimere
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 4
    Registrado : 05/07/2015

    Problemas com o módulo vba_access Empty Re: Problemas com o módulo vba_access

    Mensagem  Alcimere 5/7/2015, 22:32

    boa noite,

    vamos lá:

    estou encaminhando um banco. Tenho várias colunas que demonstram o % de compensação de diversas bandeiras em relação a uma bandeira. Preciso descobrir, dentre todas as bandeiras, aquela que tem o maior valor, ou seja, o maior % de compensação (em uma segunda etapa, irei transferir o valor de uma credora, para compensar em outra, devedora, e devo fazer isso, com o menor número possível de levantamentos, por isso, identificar a bandeira que possui maior % de compensação é necessário). Depois de uma primeira rodada, na qual identifiquei as bandeiras que possuem valor de compensação > 1, devo procurar uma 2a. opção, que seria a soma dos valores entre as bandeiras.

    fiz uma consulta Seimed, que deu certo:

    SeImed([Master_Visa]>[Agiplan_Visa] e [Master_Visa]>[Banescard_VISA] e [Master_Visa]>[Credis_VISA] e [Master_Visa]>[CREDZ_VISA] E [Master_Visa]>[VISA_015] E [Master_visa]>[VISA_023] E [Master_Visa]>[visa_029] E [Master_Visa]>[VISA_064];"Master Visa";

    Seimed([Agiplan_Visa]>[Master_Visa] e [Agiplan_Visa]>[Banescard_Visa] e [Agiplan_Visa]>[Credis_VISA] e [Agiplan_Visa]>[CREDZ_VISA] E[Agiplan_Visa]>[VISA_015] E [Agiplan_Visa]>[VISA_023] E [Agiplan_Visa]>[VISA_029] E [Agiplan_Visa] >[VISA_064]; "Agiplan VISA";

    Seimed([Banescard_Visa]>[Master_Visa] e [Banescard_Visa]>[Agiplan_Visa] e [Banescard_Visa]>[Credis_VISA] e [Banescard_Visa]>[CREDZ_VISA] E[Banescard_Visa]>[VISA_015] E [Banescard_Visa]>[VISA_023] E [Banescard_Visa]>[VISA_029] E [Banescard_Visa] >[VISA_064]; "Banescard VISA";

    Seimed([Credis_Visa]>[Master_Visa] e [Credis_Visa]>[Agiplan_Visa] e [Credis_Visa]>[CREDZ_VISA] E [Credis_Visa]>[VISA_015] E [Credis_Visa]>[VISA_023] E [Credis_Visa]>[VISA_029] E [Credis_Visa] >[VISA_064]; "Credis VISA";
    Seimed([CREDZ_Visa]>[Master_Visa] e [CREDZ_Visa]>[Agiplan_Visa] e [CREDZ_Visa]>[Credis_VISA] e [CREDZ_Visa]>[VISA_015] E [CREDZ_Visa]>[VISA_023] E [CREDZ_Visa]>[VISA_029] E [CREDZ_Visa] >[VISA_064]; "CREDZ VISA";
    Seimed([VISA_015]>[Master_Visa] e [VISA_015]>[Agiplan_Visa] e [VISA_015]>[Credis_VISA] e [VISA_015]>[CREDZ_VISA] [VISA_015]>[VISA_015] E [VISA_015]>[VISA_023] E [VISA_015]>[VISA_029] E [VISA_015] >[VISA_064]; "VISA_015";
    Seimed([VISA_023]>[Master_Visa] e [VISA_023]>[Agiplan_Visa] e [VISA_023]>[Credis_VISA] e [VISA_023]>[CREDZ_VISA] [VISA_023]>[VISA_015] E [VISA_023]>[VISA_023] E [VISA_023]>[VISA_029] E [VISA_023] >[VISA_064]; "VISA_023";

    Seimed([VISA_029]>[Master_Visa] e [VISA_029]>[Agiplan_Visa] e [VISA_029]>[Credis_VISA] e [VISA_029]>[CREDZ_VISA] e[VISA_029]>[VISA_015] E [VISA_029]>[VISA_023] E [VISA_029]>[VISA_064]; "VISA_029";
    Seimed([VISA_064]>[Master_Visa] e [VISA_064]>[Agiplan_Visa] e [VISA_064]>[Credis_VISA] e [VISA_064]>[CREDZ_VISA] [VISA_064]>[VISA_015] E [VISA_064]>[VISA_023] E [VISA_064]>[VISA_029];"VISA_064";

    O ideal seria fazer via código, pois via Seimed existem restrições de condições e caracter. Tive que quebrar em 3 campos, e fazer duas rodadas de consulta para identificar a melhor opção, e ainda, não havia cheguei na parte de somar os % de compensação.

    muito obrigada seu retorno,

    abs

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    Problemas com o módulo vba_access Empty Re: Problemas com o módulo vba_access

    Mensagem  Alexandre Neves 7/7/2015, 11:43

    Bom dia,
    Vamos esquecer o código da consulta e começar com código para módulo
    Código:
    Function MaiorCartao(dblMasterVisa As Double, dblAgiplanVisa As Double, dblBanescardVisa As Double, dblCredisVisa As Double, dblCredZVisa As Double, dblVisa015 As Double, dblVisa023 As Double, dblVisa029 As Double, dblVisa064 As Double) As String
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '  código criado por Alexandre Neves, do Fórum MaximoAccess                                                '
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Dim dblMaiorCartao As Double
        MaiorCartao = "Master Visa": dblMaiorCartao = dblMasterVisa
        If dblAgiplanVisa > dblMaiorCartao Then MaiorCartao = "Agiplan_Visa": dblMaiorCartao = dblAgiplanVisa
        If dblBanescardVisa > dblMaiorCartao Then MaiorCartao = "Banescard_VISA": dblMaiorCartao = dblBanescardVisa
        If dblCredisVisa > dblMaiorCartao Then MaiorCartao = "Credis_Visa": dblMaiorCartao = dblCredisVisa
        If dblCredZVisa > dblMaiorCartao Then MaiorCartao = "CredZ_Visa": dblMaiorCartao = dblCredZVisa
        If dblVisa015 > dblMaiorCartao Then MaiorCartao = "Visa_015": dblMaiorCartao = dblVisa015
        If dblVisa023 > dblMaiorCartao Then MaiorCartao = "Visa_023": dblMaiorCartao = dblVisa023
        If dblVisa029 > dblMaiorCartao Then MaiorCartao = "Visa_029": dblMaiorCartao = dblVisa029
        If dblVisa064 > dblMaiorCartao Then MaiorCartao = "Visa_064": dblMaiorCartao = dblVisa064
    End Function

    Chame a função


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    Alcimere
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 4
    Registrado : 05/07/2015

    Problemas com o módulo vba_access Empty Re: Problemas com o módulo vba_access

    Mensagem  Alcimere 7/7/2015, 20:43

    Alexandre, boa tarde

    mais uma vez, tks pelo help.. mas não consegui chamar a função..

    fiz assim:

    Abri uma consulta, selecionei construtor/ selecionei as funções internas do banco, e o sistema mostra os nomes dos módulos, mas o nome da consulta não está disponível..


    eis uma outra forma que fiz em um codigo anterior, funcionou da seguinte forma:

    Public Function numerarSQL(nDato) As Long
    .. abri uma consulta no módulo SQL e coloquei a seguinte forma:
    SELECT numerarSQL([Seu Nr/Num Atribuido ao cliente]) As Sequëncia, * FROM [Layout BB]
    UNION ALL SELECT numerarSQL(Null), * FROM [Layout BB] WHERE 1=0;

    abs
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    Registrado : 05/11/2009

    Problemas com o módulo vba_access Empty Re: Problemas com o módulo vba_access

    Mensagem  Alexandre Neves 9/7/2015, 11:46

    Bom dia,
    Comece a trabalhar directamente em SQL da consulta para ampliar as possibilidades de tudo
    Diga o onde quer utilizar a chamada da função: é num formulário? num relatório? numa consulta?
    Informe todos os detalhes.
    Para lhe dar um cheirinho da função, crie uma consulta, em modo SQL, cole e adapte
    SELECT CampoDaTabela, MaiorCartao(CampoMasterVisa,CampoAgiplanVisa, CampoBanescardVisa, CampoCredisVisa, CampoCredZVisa, CampoVisa015, CampoVisa023, CampoVisa029, CampoVisa064) FROM SuaTabela


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    Alcimere
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 4
    Registrado : 05/07/2015

    Problemas com o módulo vba_access Empty Re: Problemas com o módulo vba_access

    Mensagem  Alcimere 9/7/2015, 16:41

    Bom dia Alexandre,

    irei utilizar a função diretamente de uma consulta (pelos formulários consigo fazer através dos eventos, correto?, porem, neste caso não usarei formulários. Terei uma macro, que executa uma sequencia de consultas, dentre elas a que deverá chamar essa função..

    Resolvido! consegui gerar e ficou perfeito. Entendi o conceito e vou tentar incluir mais alguns if.. muito obrigada.


    Última edição por Alcimere em 9/7/2015, 17:01, editado 1 vez(es)

    Conteúdo patrocinado


    Problemas com o módulo vba_access Empty Re: Problemas com o módulo vba_access

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 22/11/2024, 08:31