MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Duplicar registro conforme necessidade do usuário

    avatar
    tombr
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 08/04/2018

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  tombr em 12/12/2020, 16:49

    Olá,

    Como faço para duplicar um registro no formulário pela quantidade que desejo.

    Exemplo:
    Loja: Minas / Contato: João.

    Quero criar um botão de comando que solicite quantas vezes deseja repetir esse dados?

    Segue em anexo o programa.
    Anexos
    [Resolvido]Duplicar registro conforme necessidade do usuário AttachmentDuplicar registro pelo usuário.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (92 Kb) Baixado 4 vez(es)


    Última edição por tombr em 14/12/2020, 09:44, editado 1 vez(es)
    avatar
    Ismael Silva
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 702
    Registrado : 11/12/2017

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  Ismael Silva em 12/12/2020, 18:46

    Boa tarde,

    Dá uma olhada vê se ajuda, inseri um botão para duplicar no formulário.
    Anexos
    [Resolvido]Duplicar registro conforme necessidade do usuário AttachmentDuplicar registro pelo usuário.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (41 Kb) Baixado 7 vez(es)

    tombr gosta desta mensagem

    avatar
    tombr
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 08/04/2018

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  tombr em 12/12/2020, 19:43

    Olá, Ismael Silva.

    Ajudou sim, muito obrigado.

    Mas eu quero clicar uma única vez no botão "duplicar registro" e escolher que esse registro se repita, por exemplo, 20 vezes.

    Não quero ficar clicando 20 vezes no botão para repetir o registro.

    É possível fazer isso para agilizar o processo de orçamento?

    avatar
    Ismael Silva
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 702
    Registrado : 11/12/2017

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  Ismael Silva em 12/12/2020, 22:56

    Tombr,

    Entendi, porém eu realmente não sei uma forma de fazer isso, que no caso seria algo como duplicar com critérios, que seria um número, mas certamente algum colega mais experiente vai saber como resolver.

    Ficamos no aguardo.

    tombr gosta desta mensagem

    avatar
    tombr
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 08/04/2018

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  tombr em 13/12/2020, 00:00

    Olá, Ismael Silva

    Mesmo assim muito obrigado pela dica.

    Vou aguardar ajuda de outra pessoa e também pesquisar "como duplicar com critérios".
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2531
    Registrado : 22/11/2016

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  DamascenoJr. em 13/12/2020, 03:39

    Retire a macro e use VBA.

    Código:
    Dim varQtd As Variant
    Dim varContador As Variant

    Do

        varQtd = InputBox("Informe quantas vezes duplicar:", "Duplicar")
        
        If StrPtr(varQtd) = 0 Then Exit Sub
        
        varQtd = Trim(varQtd)
        
        If IsNumeric(varQtd) And InStr(varQtd, ".") = 0 And InStr(varQtd, ",") = 0 Then
            If varQtd > 0 Then
                Exit Do
            Else
                Call MsgBox("Informe um valor maior que 0.", vbInformation, "Duplicar")
            End If
        Else
            Call MsgBox("Informe um valor maior que 0.", vbInformation, "Duplicar")
        End If

    Loop

    Call DoCmd.RunCommand(acCmdSelectRecord)
    Call DoCmd.RunCommand(acCmdCopy)

    For varContador = 1 To varQtd
        Call DoCmd.GoToRecord(acDataForm, Me.Name, acNewRec)
        Call DoCmd.RunCommand(acCmdSelectRecord)
        Call DoCmd.RunCommand(acCmdPaste)
        Call DoCmd.RunCommand(acCmdSaveRecord)
    Next varContador


    .................................................................................
    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.

    tombr gosta desta mensagem

    avatar
    tombr
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 08/04/2018

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  tombr em 13/12/2020, 13:40

    Olá, DamascenoJr.

    Obrigado pela ajuda.

    Coloquei seu código VBA, mas deu a seguinte mensagem:

    "Erro em tempo de execução '2489':
    O objeto '2' não está aberto.

    Ao clicar em Depurar é sinalizado: → Call DoCmd.GoToRecord(acDataForm, Me.Loja, acNewRec)

    Esse objeto '2' seria o Me.Contato, não sei aonde colocar,
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2531
    Registrado : 22/11/2016

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  DamascenoJr. em 13/12/2020, 13:54

    Apague o que está em vermelho

    ...
    Call DoCmd.GoToRecord(acDataForm, Me.Name, acNewRec)
    ...


    .................................................................................
    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.

    tombr gosta desta mensagem

    avatar
    tombr
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 08/04/2018

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  tombr em 13/12/2020, 14:49

    Olá, DamascenoJr

    Segui sua última orientação, mas infelizmente continua apresentando mensagem de erro.

    Agora:
    "Erro em tempo de execução '2489':
    O objeto '5' não está aberto.

    Segue em anexo o arquivo:
    Anexos
    [Resolvido]Duplicar registro conforme necessidade do usuário AttachmentDuplicar registro pelo usuário.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (131 Kb) Baixado 6 vez(es)
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2531
    Registrado : 22/11/2016

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  DamascenoJr. em 13/12/2020, 20:51

    Uma vírgula apagada e tudo vai por água abaixo (risos)

    ...
    Call DoCmd.GoToRecord(, , acNewRec)
    ...


    .................................................................................
    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.

    tombr gosta desta mensagem

    avatar
    tombr
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 08/04/2018

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  tombr em 14/12/2020, 09:37

    Obrigado pela ajuda.
    avatar
    Ismael Silva
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 702
    Registrado : 11/12/2017

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  Ismael Silva em 14/12/2020, 11:49

    Tombr,

    Com sua licença, gostaria de pedir ao colega Damasceno, se puder comentar o que cada comando do código faz, para estudos do mesmo.

    Obrigado.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2531
    Registrado : 22/11/2016

    [Resolvido]Duplicar registro conforme necessidade do usuário Empty Re: [Resolvido]Duplicar registro conforme necessidade do usuário

    Mensagem  DamascenoJr. em 15/12/2020, 01:35

    Primeiro a se fazer, declarar as variáveis

    Código:
    Dim varQtd As Variant
    Dim varContador As Variant

    Depois, preciso saber quantas vezes o usuário quer duplicar um registro. Para saber dessa informação, vou pedir que o usuário me diga isso através de uma caixa de entrada (inputbox). Só que em uma caixa de entrada o usuário pode informar qualquer coisa (letras, números, símbolos ou até mesmo nada), então vou criar um loop e só deixar o código seguir em frente se o usuário informar um valor aproveitável.

    Estrutura do loop criado
    Código:
    Do 'ponto inicial do loop
    ...
    Loop 'ponto final do loop, ou seja, chegando aqui, se eu não permitir, então o código vai voltar a ser executado novamente desde o ponto inicial

    código do loop completo
    Código:
    Do 'ponto inicial do loop

        'salvando em uma variável a informação que o usuário fornecer
        varQtd = InputBox("Informe quantas vezes duplicar:", "Duplicar")
       
        'verificando se realmente foi passado alguma coisa pra variável
        'isto é, se o usuário clicou em cancelar então saia do código todo, ou seja, pare a execução deste procedimento
        If StrPtr(varQtd) = 0 Then Exit Sub
       
        'beleza, se não foi clicado em cancelar, para fins "estéticos" vou limpar
        'qualquer espaço que o usuário possa ter informado sem querer no início ou no final
        'lá na hora de capturar a informação na caixa de entrada. Só assim posso analisar corretamente o que ele informou
        varQtd = Trim(varQtd)
       
        'se o que ele informou é um número e não contém ponto e nem vírgula (ora bolas, não existirá registro fracionado) então
        If IsNumeric(varQtd) And InStr(varQtd, ".") = 0 And InStr(varQtd, ",") = 0 Then
            'nem todo número inteiro que ele informar vai valer, só é válido se for um número maior que zero
            If varQtd > 0 Then
                'saindo do loop, isto é, aqui é um buraco de minhoca
                'levando a execução do código imediatamente ao primeiro ponto final de um loop
                '(digo primeiro ponto final pois há casos de loop dentro de outro loop)
                Exit Do
            'senão, se o valor é menor ou igual a zero
            Else
                'mostro uma mensagem
                Call MsgBox("Informe um valor maior que 0.", vbInformation, "Duplicar")
            End If
        'senão, se o valor passado pelo usuário não é um número ou se contém ponto ou contém vírgula
        Else
            'mostro uma mensagem
            Call MsgBox("Informe um valor maior que 0.", vbInformation, "Duplicar")
        End If

    Loop 'ponto final do loop

    Restante do código a ser executado já de posse de um número maior que 0 que foi informado pelo usuário

    Código:
    'selecionando o registro ativo
    Call DoCmd.RunCommand(acCmdSelectRecord)
    'copiando o registro selecionado
    Call DoCmd.RunCommand(acCmdCopy)

    Estrutura de loop criado, é um loop do tipo "For... Next...". Esse tipo é melhor quando precisamos interagir com cada execução do loop ou já sabemos quantas vezes esse loop deve executado.
    Código:
    For varContador = 1 To varQtd
        ...
    Next varContador

    Código:
    'ponto inicial do loop, executando de 1 até a quantidade de vezes que o usuário informou
    'salvando o valor de cada volta na variável varContador
    For varContador = 1 To varQtd
        'indo para a posição de novo registro no formulário ativo
        Call DoCmd.GoToRecord( , , acNewRec)
        'selecionando toda a posição de novo registro
        Call DoCmd.RunCommand(acCmdSelectRecord)
        'colando o registro copiado na posição de novo registro
        Call DoCmd.RunCommand(acCmdPaste)
        'salvando o registro colado
        Call DoCmd.RunCommand(acCmdSaveRecord)
    Next varContador 'ponto final do loop, se não for a última volta, então retorna ao ponto inicial


    .................................................................................
    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.

    tombr gosta desta mensagem


      Data/hora atual: 22/1/2021, 00:21