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


    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Access365
    Access365
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 288
    Registrado : 09/07/2012

    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty (Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Access365 9/9/2012, 09:07

    Olá pessoal, mais uma vez eu venho aqui com uma "bomba",
    Através de umas instruções lidas aqui eu estou tentando implementar estes códigos em um formulário
    com alguns controles de memorando com limite de caracteres... Então vamos lá...

    ----NO CAMPO COM LIMITE----
    Private Sub Contrato_BeforeUpdate(Cancel As Integer)
    On Error Resume Next
    If Len(Nz(Me.ActiveControl, "")) > 214 Then
    Cancel = True
    Call MsgBox("Você excedeu os 214 caracteres permitidos, diminua o texto do CONTRATO.", vbOKOnly, "Aviso")
    End If
    End Sub

    ----BOTÃO SALVAR----
    Private Sub ButSalvar_Click()
    Dim QCaracter As Integer
    If Len(Nz(Me.Contrato, "")) > 214 Then
    QCaracter = MsgBox("Você excedeu os 214 caracteres permitidos, diminua o texto do CONTRATO.", vbOKOnly, "Aviso")
    If QCaracter = vbOKOnly Then
    Cancel = True
    End If
    Else
    If Len(Nz(Me.Contrato, "")) <= 214 Then
    DoCmd.RunCommand acCmdSaveRecord
    MsgBox "Gravação efetuada com sucesso.", vbInformation, ""

    End If
    End If
    End Sub

    ----BOTÃO FECHAR----
    Private Sub ButFechar_Click()
    Dim QCaracter As Integer
    If Len(Nz(Me.Contrato, "")) > 214 Then
    QCaracter = MsgBox("Você excedeu os 214 caracteres permitidos, diminua o texto do CONTRATO.", vbOKOnly, "Aviso")
    If QCaracter = vbOKOnly Then
    Cancel = True
    Else
    If Len(Nz(Me.Contrato, "")) <= 214 Then
    If Me.Dirty = False Then
    DoCmd.Close
    End If
    Else
    If QCaracter = MsgBox("Alterações detectadas, deseja salvá-las?", vbYesNo + vbInformation, "Confirmação") = vbNo Then
    Me.Undo
    MsgBox "Todas as alterações foram desfeitas!", vbQuestion, ""
    End If
    If QCaracter = vbYes Then
    DoCmd.RunCommand acCmdSaveRecord
    MsgBox "Gravação efetuada com sucesso.", vbInformation, ""

    End If
    End If
    End If
    End If
    End Sub

    ----BOTÃO AbrirEXContrato----
    Private Sub AbrirEXContrato_Click()
    Dim QCaracter As Integer
    If Len(Nz(Me.Contrato, "")) > 214 Then
    QCaracter = MsgBox("Você excedeu os 214 caracteres permitidos, diminua o texto do CONTRATO.", vbOKOnly, "Aviso")
    If QCaracter = vbOKOnly Then
    Cancel = True
    End If
    Else
    If Len(Nz(Me.Contrato, "")) <= 214 Then
    DoCmd.OpenForm "EX-Contrato"
    End If
    End If
    End Sub

    ---------------------
    Somente no campo com limite é que está funcionando, pois se ultrapasso o limite de caracteres e tento
    ir para outro controle, a caixa de mensagem aparece dizendo que excedi os 214 caracteres.
    E no outros, quando eu clico, a barra de título da janela pop-up do formulário pisca e não acontece nada.
    Marquei de vermelho o que esperava que acontecesse, caso o limite de caracteres não fosse excedido.
    Eu não sei o que estou fazendo de errado... alguém pode me dar um help?

    Desde já agradeço!
    Paulo César
    avatar
    Convidado
    Convidado


    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Convidado 9/9/2012, 13:33

    Boas Info... Manda o Bd ai...

    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Convidado 9/9/2012, 14:14

    Estive a dar uma olhada no teu código.... e pelo que percebi você precisa modificar o botão da mensagem pois só esta exibindo o botão [color=red][b[/color]]OK[/b], oras... se há apenas o VbokOnly, não há necessidade de uma condição para o mesmo.

    ----BOTÃO SALVAR----
    Private Sub ButSalvar_Click()
    Dim Msg As String
    If Len(Nz(Me.Contrato, "")) > 214 Then
    Msg = MsgBox("Você excedeu os 214 caracteres permitidos, diminua o texto do CONTRATO.",vbYesNo, "Aviso")
    If Msg = VbNo Then: Cancel = True: Exit Sub
    If Msg = VbYes: DoCmd.RunCommand acCmdSaveRecord: MsgBox "Gravação efetuada com sucesso.", vbInformation, ""
    End If
    End Sub

    Tente Assim


    Cumprimentos.
    Access365
    Access365
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 288
    Registrado : 09/07/2012

    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Access365 9/9/2012, 18:53

    Olá Piloto, como tem passado? Teste o que vc postou e não funfou... coloquei um 'Then' depois do 'VbYes', mas continua não funfando...

    Há não muito tempo eu estava aqui te amolando e pelo que parece, me deparei, novamente, com outro problema...
    Eu tive que diminuir um espaço no meu relatório, limitando assim a quantidade de caracteres inseridos no campo da Tabela, e eu achei um "limitador de caracteres" para Formulário...

    Ontem, notei que se eu ultrapassasse este limite de caracteres e tentasse SALVAR, o Access2003 abria o depurador colorindo a linha: DoCmd.RunCommand acCmdSaveRecord, por isso estou fazendo esta "bagunça" agora... (risos)

    Da mesma forma é o FECHAR que avisava, mas fechava o Form não salvando e nem dando a opção do usuário diminuir o texto.

    E o "Private Sub AbrirEXContrato_Click()" abre o outro Form sem avisar nada, então eu coloquei um "Me.Requery" e então ele tá avisando, mas abre mesmo assim.

    Estou postando o exemplo que pedistes...

    P.S.: Sem querer abusar da sua boa fé (e te amolando mais um pouquinho, rsrs), tem um Form chamado
    CARTA que só tem um Memorando nele, vc sabe se existe uma forma de fazer o scroll do mouse rolar a
    barra de rolagem deste controle Memorando sem ir para o próximo registro?

    Novamente, muito obrigado!
    Paulo César
    avatar
    Convidado
    Convidado


    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Convidado 9/9/2012, 22:20

    Cite os forms e o que deseja que os botoes façam....

    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Convidado 10/9/2012, 01:00

    1 - Como o botao tem só uma ação... Não é necessário colocar o if para o caso de clicar no botao.
    2 - Uma Variável que carrega uma MsgBox tem que ser do tipo String.
    3 - Caso o texto seja > que 214 vai para mensagem caso contrario vai para o comando salvar..
    4 - A caixa texto tem que ser referenciada como .Text pois a mesma ainda nao está atualizada.

    Private Sub ButSalvar_Click()
    Dim QCaracter As String
    If Len(Nz(Me.Contrato.Text, "")) > 214 Then
    QCaracter = MsgBox("Você excedeu os 214 caracteres permitidos, diminua o texto do CONTRATO.", vbOKOnly, "Aviso")
    Cancel = True
    Me.Contrato.SetFocus
    Exit Sub
    Else
    DoCmd.RunCommand acCmdSaveRecord
    MsgBox "Gravação efetuada com sucesso.", vbInformation, ""
    End If
    End Sub



    Adapte para os outros botões.

    Cumprimentos.
    Access365
    Access365
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 288
    Registrado : 09/07/2012

    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Access365 10/9/2012, 04:12

    Valeu Piloto, agora está OK pra "SALVAR" e pra "AbrirEXContrato", mas está com probleminha, ele tá indo direto pra depuração, conforme a imagem que estou postando (caso algum botão seja clicado sem ter feito nada)... Será que existe uma maneira de ignorar este erro sem que ele vá pra depuração!
    Somente não funfou para o SALVAR... Eu to fazendo assim:
    ----SALVAR----
    Private Sub ButFechar_Click()
    Dim QCaracter As Integer
    If Len(Nz(Me.Contrato.Text, "")) > 214 Then
    QCaracter = MsgBox("Você excedeu os 214 caracteres permitidos, diminua o texto do CONTRATO.", vbOKOnly, "Aviso")
    Cancel = True: Exit Sub
    Me.Contrato.SetFocus
    Else
    End If

    If Me.Dirty = False Then
    End If

    If QCaracter = MsgBox("Alterações detectadas, deseja salvá-las?", vbYesNo + vbInformation, "Confirmação") = vbNo Then
    Me.Undo
    MsgBox "Todas as alterações foram desfeitas!", vbQuestion, ""

    DoCmd.Close
    End If
    Exit Sub

    DoCmd.RunCommand acCmdSaveRecord
    MsgBox "Gravação efetuada com sucesso.", vbInformation, ""
    DoCmd.Close

    End Sub

    Onde eu coloquei VERMELHO, não está sendo executado, mas ele salva e fecha! To aqui tentando, pois enquanto tento, aprendo coisas magníficas sobre o VBA, mas já tô suando... por isso to respondendo... rsrs

    Sobre a sua pergunta: "Cite os forms e o que deseja que os botoes façam...."se eu a entendi; respondo: o Form é 'Endereço' e os botões são |SALVAR|, se for >214 caracteres, ele avisa e pára o evento e só salva depois que o usuário diminuir; o |FECHAR|, se for >214 caracteres, ele avisa e alerta sobre as alterações efetuadas perguntando se quer efetivá-las, se |SIM|, ele pára o evento; se |NÃO|, ele diz que as alterações vão ser desfeitas e fecha o Form e sobre o |AbrirEXContrato|, se for >214 caracteres, ele avisa e pára o evento e só abre o outro Form depois que o usuário diminuir. (é isso que queria saber?)

    Valeu amigo!
    avatar
    Convidado
    Convidado


    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Convidado 10/9/2012, 15:06

    Agora vem uma parte importante na programação: O Tratamento de Erros

    If Len(Nz(Me.Contrato.Text, "")

    >>>> Ao fazer referencia a uma caixa texto com a propriedade .Text, só se pode se a caixa tiver o foco, o erro está dando porque se o cursor não estiver dentro da caixa texto... esse referencia não pode ser feita. Como fazer então sendo que precisamos desse comando?

    Simples.. o Tratamento de Erros:

    Private Sub ButFechar_Click()
    On Error Goto TrataErro

    ... Códigos


    Exit Sub

    Exit_TrataErro:
    DoCmd.Hourglass False
    DoCmd.Echo True
    Exit Sub

    TrataErro:
    'Aqui tratamos o erro para que se caso aconteça vá para a próxima linha de execução
    If err.Number = 2185 Then
    Resume Next
    Else
    DoCmd.Hourglass False
    DoCmd.Echo True
    Msg = "Erro # " & Str(err.Number) & " gerado na " & err.Source _
    & vbNewLine & vbNewLine & "Descrição: " & err.description _
    & vbNewLine & vbNewLine & "Por favor contate o Administrador de Sistema."
    MsgBox Msg, vbMsgBoxHelpButton + vbCritical, "Erro", err.Helpfile, err.HelpContext
    Resume Exit_TrataErro
    End If
    End Sub



    Cumprimentos.
    Access365
    Access365
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 288
    Registrado : 09/07/2012

    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Access365 10/9/2012, 17:37

    Nossa Piloto o Access é incrível... Sabia que eu estou (nas partes mais simples) digitando sem ter que copiar e colar alguns códigos, o o melhor... funfa... rsrs (as vezes)! Graças a tudo que já vi com vc, até agora!

    Amigo, funfou legal o tratamento de erros, só que agora, por exemplo, se o usuário corrige qualquer outro campo, ou mesmo se não digita nada, aparece a msg dizendo que ultrapassou o limite de 214 caracteres, mesmo com o campo em questão estar com menos de 214 caracteres. (vixi)

    To mexendo... e muito obrigado!
    Access365
    Access365
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 288
    Registrado : 09/07/2012

    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Access365 10/9/2012, 19:05

    Piloto, eu vi vários caras dizendo aqui: "Faça o simples..."
    Eu estou me enrolando todinho só por causa de uma exemplo que eu achei para limitar qntde de caracteres...

    Por isso estava pensando... Na Tabela, usando um textbox, é só limitar a quantidade de caracteres, quando menor de 255...

    No meu caso é um Memorando... Talvez você saiba... será que não existe uma forma básica, simples de travar o Memorando, igualmente como acontece na textbox? (...) Simplesmente, ao atindir o limite, não aparece mais nenhum caracter e é emitido um som (como no textbox).

    Só conjecturas.. rsrs
    Obrigado!
    avatar
    Convidado
    Convidado


    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Convidado 10/9/2012, 21:40

    Para um problema existem mais de uma forma de se conseguir a solução.. Estás certo em tentar varias...

    Escolha a mais simples e eficaz... E isso só você podera saber.. Afinal você sabe o efetivo uso do sistema.


    Cumprimentos.
    Access365
    Access365
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 288
    Registrado : 09/07/2012

    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Access365 10/9/2012, 23:31

    Piloto, nem sei como agradecer a paciência e disponibilidade que você sempre demonstra ao tratar das dúvidas que exponho aqui!

    Eu estava com tentando resolver o problema causado pelo limite de caracteres baseado num exemplo que eu encontrei e que não era, efetivamente, o que eu precisa... As vezes, ao fazer uma busca no fórum, nos falta um pouco de conhecimento também... a palavra chave seria "campo limitado" e não limite de caracteres... rsrs e descobri isso "fuçando" no fórum... e numa dessas "viajens", de um tópico a outros descobrir a palavra chave... pesquisei e... voilà... descobri um exemplo de autoria de JPaulo, abençoado seja!

    Agradeço por tudo que me ensinastes... uso 100%... "cutuco" dali e daqui, mexo, mexo e acabo por aprender muito mais e não somente sobre a solução do problema em que eu me encontrava. Aprendo com você, muito mais do que em qualquer outro lugar... e hoje foi o tratamento de erros, muito bom isso!

    Optando pelo simples, fiz assim:
    ----EVENTO: Ao alterar----
    Private Sub Contrato_Change()
    Dim I As Integer, intSomaCarateres As Integer
    If Len(Me.Contrato.Text) > 214 Then
    Me.Contrato.Text = Left(Me.Contrato.Text, 214)
    Me.Contrato.SelStart = 214
    MsgBox "Limite de caracteres para este campo, excedido!", vbExclamation, "Aviso"
    End If
    intSomaCarateres = 0
    For I = 1 To Me.Contrato.SelStart
    intSomaCarateres = I
    Next I
    Me.txtTotalCarateresC.value = intSomaCarateres
    If Me.txtTotalCarateresC.value = 0 Then
    Me.txtTotalCarateresC.value = "0"
    End If
    End Sub

    Depois é só colocar um controle de texto desacoplado com o mesmo nome que eu marquei aqui de vermelho.
    Estou colocando o mesmo exemplo aqui, porém, funcionando.
    -------------------
    Meu amigo, agradeço, novamente, por tudo!
    Muita luz pra você!
    Paulo César
    Anexos
    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não AttachmentHonoráriosCampoLimitadoPorJPauloePiloto.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (503 Kb) Baixado 41 vez(es)
    avatar
    Convidado
    Convidado


    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Convidado 10/9/2012, 23:37

    So para registrar... O tratamento de erros é utilizado largamente, creio que em uma das salas de repositorio ou tutotiais há hum artigo bem explicativo sobre as varias formas e o que executam..

    Esse codigo acima de tratamento de erros é de Autoria do Nosso Mestre JP.

    O Fórum agradece o Retorno.
    Access365
    Access365
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 288
    Registrado : 09/07/2012

    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Access365 10/9/2012, 23:51

    OK... valeu, vou "fuçar" lá então...
    E sou eu quem agradece.... e muito.
    Obrigado Piloto e muita luz!
    Paulo César
    avatar
    Convidado
    Convidado


    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Convidado 11/9/2012, 04:39

    O Fórum agradece o Retorno.

    Conteúdo patrocinado


    [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não Empty Re: [Resolvido](Limite de caracteres) Duas ações, caso o limite seja excedido ou não

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 24/11/2024, 22:05