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

3 participantes

    [Resolvido]Automatizar referência de caminho do form

    avatar
    alecmuller
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 29
    Registrado : 03/12/2019

    [Resolvido]Automatizar referência de caminho do form Empty [Resolvido]Automatizar referência de caminho do form

    Mensagem  alecmuller Ter 19 Out - 22:52

    Olá senhores!

    Gostaria de pedir vossa ajuda para automatizar o seguinte código:

    Código:
    ''Verificamos se há duplicidade de produto na mesma tabela de preço.
    'Dim frm As Recordset
    '
    'Set frm = Me.RecordsetClone
    'With frm
    '    .FindFirst "dtpV_Produto=" & Me.dtpV_Produto & " And NOT dtpV_Cod=" & Me.dtpV_Cod & ""
    '    If Not .NoMatch Then
    '        MsgBox "Já existe um lançamento com este produto." _
    '                & Chr(10) & Chr(10) & " Por gentileza, altere o lançamento existente!", vbOKOnly, "Atenção!"
    '        Cancel = True
    '        Me.Undo
    '    End If
    'End With
    'Set frm = Nothing

    Nele, como podem ver, possuo alguns campos para verificar se o mesmo produto foi lançado mais de uma vez no mesmo registro do form de Vendas (que possui o subform com as devidas linhas de cada produto).
    Este código já me atende 100%, mas como tenho outros forms em que tenho que usar a mesma função, queria deixar isso em uma Sub pública dentro de um módulo, apenas chamando ela, assim, acredito eu, seria mais fácil caso precisasse fazer uma manutenção que fosse válida para todos os forms, bem como economizo linhas de código e deixa mais limpo.

    Para fazer isso acontecer direito, acredito que seja necessário apenas substituir os lugares que possuem nome de campo (ex: "dtpV_Produto") e controles (ex: Me.dtpV_Produto).
    Infelizmente não tive sucesso ainda. Segue o código como está na sub do módulo:

    Código:
    Public Sub ImpedeDuplicidade(SubfAtual As String, cProduto As String, cCod As String)

    'Verificamos se há duplicidade de produto no mesmo subform.
    Dim frm As Recordset

    Set frm = Forms(SubfAtual).RecordsetClone
    With frm
        .FindFirst cProduto & "=" & Forms(SubfAtual)(cProduto) & " And NOT " & cCod & "=" & Forms(SubfAtual)(cCod) & ""
        If Not .NoMatch Then
            MsgBox "Já existe um lançamento com este produto." _
                    & Chr(10) & Chr(10) & " Por gentileza, altere o lançamento existente!", vbOKOnly, "Atenção!"
            'Cancel = True
            Forms(SubfAtual).Undo
        End If
    End With
    Set frm = Nothing

    End Sub

    Para chamar essa sub usei, no evento antes de atualizar do subform (estava funcionando normal aqui com o código antigo): Call ImpedeDuplicidade("frmVenda_tp_subf", "dtpV_Produto", "dtpV_Cod")

    O erro acontece logo na linha de "Set frm = ....."
    [Resolvido]Automatizar referência de caminho do form Access10

    Nome do subform está correto!

    O que eu tenho que corrigir para que o VBA entenda direito o caminho do subform e os devidos campos?
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7613
    Registrado : 15/03/2013

    [Resolvido]Automatizar referência de caminho do form Empty Re: [Resolvido]Automatizar referência de caminho do form

    Mensagem  Alvaro Teixeira Qua 20 Out - 8:51

    avatar
    alecmuller
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 29
    Registrado : 03/12/2019

    [Resolvido]Automatizar referência de caminho do form Empty Re: [Resolvido]Automatizar referência de caminho do form

    Mensagem  alecmuller Qua 20 Out - 20:55

    Teixeira, agradeço por sua resposta!

    Tentei procurar no site, mas não consegui achar nada relacionado.

    O primeiro código que eu havia postado já estava funcionando. Estava no evento "antes de atualizar" do subform em questão.
    Minha dificuldade é transformar este código que está específico para o exemplo em questão (com seus devidos nomes de capos, etc) para um módulo, de maneira que eu possa apenas chamar a nova sub, informando os devidos parâmetros.

    O motivo de eu querer fazer isso é para reduzir linhas de códigos e manter a padronização e facilidade quando precisar fazer alguma manutenção neste script, visto que, até o momento, ele se repete para 4 forms diferentes.

    Meu problema está ocorrendo quando tento usar o nome do subform e dos campos como variáveis, como pode ver no segundo código que mandei.
    Tentei trocar o tipo de dados dos parâmetros de string para form e object, mas não deu certo, deu erro de tipos incompatíveis. Sad
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3707
    Registrado : 21/11/2016

    [Resolvido]Automatizar referência de caminho do form Empty Re: [Resolvido]Automatizar referência de caminho do form

    Mensagem  DamascenoJr. Qua 20 Out - 21:28

    Problema de referenciamento.

    Subformulários recebem este nome por estarem contidos em outro formulário. Será necessário também informar o formulário pai. Terá que criar mais um parâmetro na sua sub.

    O apontamento é

    Código:
    Set frm = Forms(strFormPai)(strNomeControleFormFilho).Form.RecordsetClone


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    alecmuller
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 29
    Registrado : 03/12/2019

    [Resolvido]Automatizar referência de caminho do form Empty Re: [Resolvido]Automatizar referência de caminho do form

    Mensagem  alecmuller Qua 20 Out - 21:58

    Mestre Damasceno,

    Tentei da forma como falou, mas não consegui :C
    Estou mandando o BD em anexo.

    Se abrir o form frmVenda_tp e tentar inserir uma linha com o mesmo produto que já esteja em outra linha anterior, vai ver que dá o erro.
    O código original, que funciona perfeitamente, está comentado.
    Tanto ele, quanto a chamada da sub estão no evento "Antes de atualizar" do subform. Já a sub que estou tentando automatizar está no módulo procedures.

    Se o trabalho para realizar essa automatização for grande demais, vou deixar do jeito que funciona mesmo. Estou querendo fazer isso mais por organização do que por necessidade.
    Anexos
    [Resolvido]Automatizar referência de caminho do form AttachmentProject01 - Copia.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (45 Kb) Baixado 13 vez(es)
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3707
    Registrado : 21/11/2016

    [Resolvido]Automatizar referência de caminho do form Empty Re: [Resolvido]Automatizar referência de caminho do form

    Mensagem  DamascenoJr. Qua 20 Out - 22:11

    Código que resolve (como apontado na minha mensagem anterior)

    Sub pública (aceitando um novo parâmetro - o nome do formulário pai)
    Código:
    Public Sub ImpedeDuplicidade(FormPai As String, SubfAtual As String, cProduto As String, cCod As String)

    'Verificamos se há duplicidade de produto no mesmo subform.
    Dim frm As Recordset

    Set frm = Forms(FormPai)(SubfAtual).Form.RecordsetClone
    With frm
        .FindFirst cProduto & "=" & Forms(FormPai)(SubfAtual)(cProduto) & " And NOT " & cCod & "=" & Forms(FormPai)(SubfAtual)(cCod) & ""
        If Not .NoMatch Then
            MsgBox "Já existe um lançamento com este produto." _
                    & Chr(10) & Chr(10) & " Por gentileza, altere o lançamento existente!", vbOKOnly, "Atenção!"
            'Cancel = True
            Forms(FormPai)(SubfAtual).Form.Undo
        End If
    End With
    Set frm = Nothing

    End Sub

    A chamada
    Código:
    Call ImpedeDuplicidade(Parent.Name, "tpVenda_subform", "dtpV_Produto", "dtpV_Cod")
    Atentando-se que para o parâmetro SubfAtual é passado o nome do controle subformulário dentro do formulário pai, e não o nome do subformulário como aparece no painel de navegação.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

    alecmuller gosta desta mensagem

    avatar
    alecmuller
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 29
    Registrado : 03/12/2019

    [Resolvido]Automatizar referência de caminho do form Empty Re: [Resolvido]Automatizar referência de caminho do form

    Mensagem  alecmuller Qua 27 Out - 21:30

    Damasceno, muito obrigado cara, funcionou perfeitamente!


    DamascenoJr. escreveu:Atentando-se que para o parâmetro SubfAtual é passado o nome do controle subformulário dentro do formulário pai, e não o nome do subformulário como aparece no painel de navegação.
    Acho que o que eu tinha feito errado depois de você apresentar a solução, foi justamente essa parte. Acho que mantive o nome do subform, ao invés do nome do controle dele dentro do form pai, não me atentando ao detalhe que você já tinha deixado claro.

    Tópico resolvido!
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3707
    Registrado : 21/11/2016

    [Resolvido]Automatizar referência de caminho do form Empty Re: [Resolvido]Automatizar referência de caminho do form

    Mensagem  DamascenoJr. Sab 30 Out - 17:45

    O fórum agradece o retorno. Sucesso.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

      Data/hora atual: Sab 1 Out - 12:08