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

    Erro ao fechar e abrir um formulário

    avatar
    carniel.ass.info
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 69
    Registrado : 14/09/2012

    Erro ao fechar e abrir um formulário Empty Erro ao fechar e abrir um formulário

    Mensagem  carniel.ass.info 31/10/2022, 15:05

    Prezados, uma orientação se possível:

    Tenho um procedimento em VBA que executa a seguinte trajetória:

    ao receber o foco

    Private Sub BtCNF_GotFocus()

    If EstáCarregado("Frm_DlgImprPed") = True Then
       If Forms![Frm_DlgImprPed]![Aux] = 1 Then
           DoCmd.Close acForm, "Frm_DlgImprPed" este aqui está ok
           Call BtCNF_Click
           DoCmd.Close acForm, "Frm_Pedidos"  este aqui está dando erro
           DoCmd.OpenForm "Frm_Pedidos"
       End If
    End If

    Private Sub BtCNF_Click() 0 Call vem aqui

    ... aqui executo alguns comandos de impressão direta na impressora

    End Sub

    quando essa Sub "volta" pro evento acima Private Sub BtCNF_GotFocus() após o Call dá o erro:

    Erro em tempo de execução "2585"

    Esta ação não pode ser executada durante o processamento de um evento de formulário ou relatório.

    E não faz o que quero que é fechar e imediatamente abrir o formulário "Frm_Pedidos".

    Não sei se fui claro.

    Abraços
    crysostomo
    crysostomo
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2677
    Registrado : 23/01/2018

    Erro ao fechar e abrir um formulário Empty Re: Erro ao fechar e abrir um formulário

    Mensagem  crysostomo 2/11/2022, 00:29

    Boa noite.
    O erro que está dando é foco em algum botão ou campo.
    o formulário não vai fechar enquando algo esta sendo gerado


    .................................................................................
    Obs.: Coloque somente as partes defeituosas para que possamos encontrar e entender  o problema mais rápido para lhe ajudar. Disponho.
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.
    avatar
    carniel.ass.info
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 69
    Registrado : 14/09/2012

    Erro ao fechar e abrir um formulário Empty Re: Erro ao fechar e abrir um formulário

    Mensagem  carniel.ass.info 2/11/2022, 20:32

    crysostomo boa tarde com frio aqui em Ribeirão Preto cheers

    Seguinte amigo, não deu certo sua dica, "mandei o foco pra outro local  antes de executar os comandos de fechamento do form, mas o erro persiste, olhe o código abaixo alterado:

    =======================>

    Private Sub BtCNF_GotFocus()

    If EstáCarregado("Frm_DlgImprPed") = True Then
       If Forms![Frm_DlgImprPed]![Aux] = 1 Then
           DoCmd.Close acForm, "Frm_DlgImprPed"
           Call BtCNF_Click
           Me.PED_NPED.SetFocus (aqui desviei o foco, sai do botão Sub BtCNF_GotFocus e foquei outro campo)
           DoCmd.Close acForm, "Frm_Pedidos"
           DoCmd.OpenForm "Frm_Pedidos"
       End If
    End If

    ======================>

    Acredito que preciso "interromper ou finalizar" o evento em si, BtCNF_GotFocus() mas não sei como, não dá com o docmd.cancel events (ja testei)
    Essas ações "ao receber o foco" são meio complexas, pois criam situações dependendo de onde e como estão sendo usadas.

    Obs: Agora postando a replica me ocorreu até de "tirar" os comandos de close form do evento BtCNF_GotFocus(), e inserir lá na focagem do campo Me.PED_NPED mas tbm dá o erro ex:

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Fase 1: ao receber o foco

    If EstáCarregado("Frm_DlgImprPed") = True Then
       If Forms![Frm_DlgImprPed]![Aux] = 1 Then
           Call BtCNF_Click
       End If
    End If

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    No final da rotina desse Call Call BtCNF_Click tem o desvio:

    Me.PED_NPED.SetFocus

    Segue abaixo o que a rotina BtCNF_Click faz

    *******************************************************

    Private Sub BtCNF_Click()

    If IsNull(Me.PED_CDPG) Then
       DoCmd.Beep
       MsgBox "Campo: << Cond. de pagto >> obrigatório", vbCritical, "Erro"
       Me.PED_CDPG.SetFocus
       Exit Sub
    End If

    If IsNull(Me.PED_FMPG) Then
       DoCmd.Beep
       MsgBox "Campo: <> obrigatório", vbCritical, "Erro"
       Me.PED_FMPG.SetFocus
       Exit Sub
    End If

    'Mapea a impressora termica
    Shell "c:\cai\utils\epsontm.bat", vbHide
    Pausa_App (1)

    Dim StrRzFt As String
    Dim Str2v As Integer
    Str2v = 1

    'Open "LPT1:" For Output Access Write As #1
    Open CurrentProject.Path & "\Cupom.txt" For Output Access Write As #1

    PRT:
    'cabeçalho 1 - empresa emitente

    StrRzFt = DFirst("[EMP_RAZS]", "Tab_Empresa")
    Print #1, Tab(Round((47 - Len(StrRzFt)) / 2)); StrRzFt;
    StrRzFt = Empty

    StrRzFt = DFirst("[EMP_FANT]", "Tab_Empresa")
    Print #1, Tab(Round((47 - Len(StrRzFt)) / 2)); StrRzFt;
    StrRzFt = Empty

    Print #1, Tab(0); String(47, "-");

    StrRzFt = DFirst("[EMP_ENDE]", "Tab_Empresa") & " Nro: "
    StrRzFt = StrRzFt & DFirst("[EMP_NUMR]", "Tab_Empresa")
    Print #1, Tab(Round((47 - Len(StrRzFt)) / 2)); StrRzFt;
    StrRzFt = Empty

    StrRzFt = DFirst("[EMP_BAIR]", "Tab_Empresa") & " Cep: "
    StrRzFt = StrRzFt & DFirst("[EMP_CEP]", "Tab_Empresa")
    Print #1, Tab(Round((47 - Len(StrRzFt)) / 2)); StrRzFt;
    StrRzFt = Empty

    StrRzFt = DFirst("[EMP_CIDA]", "Tab_Empresa") & " - "
    StrRzFt = StrRzFt & DFirst("[EMP_UF]", "Tab_Empresa")
    StrRzFt = StrRzFt & "  Tel: " & DFirst("[EMP_FCOM]", "Tab_Empresa")
    Print #1, Tab(Round((47 - Len(StrRzFt)) / 2)); StrRzFt;
    StrRzFt = Empty

    Print #1, Tab(0); String(47, "-");

    StrRzFt = "Email: " & DFirst("[EMP_EML]", "Tab_Empresa")
    Print #1, Tab(Round((47 - Len(StrRzFt)) / 2)); StrRzFt;
    StrRzFt = Empty

    StrRzFt = "Site: " & DFirst("[EMP_SITE]", "Tab_Empresa")
    Print #1, Tab(Round((47 - Len(StrRzFt)) / 2)); StrRzFt;
    StrRzFt = Empty

    Print #1, Tab(0); String(47, "-");

    'cabeçalho 2 - pedido

    StrRzFt = "Ped: " & Me.PED_NPED & "   Data: " & Me.Campo1 & "   " & Format(Time, "hh:mm")
    Print #1, Tab(Round((47 - Len(StrRzFt)) / 2)); StrRzFt;
    StrRzFt = Empty

    Print #1, Tab(0); String(47, "-");

    StrRzFt = "*** CLIENTE ***"
    Print #1, Tab(Round((47 - Len(StrRzFt)) / 2)); StrRzFt;
    StrRzFt = Empty

    Print #1, Tab(0); String(47, "-");

    'cabeçalho 3 - cliente

    StrRzFt = Me.PED_CODC.Column(1)

    'razão social e se tiver nome fantasia - cliente
    If IsNull(Me.PED_CODC.Column(6)) = False Or Me.PED_CODC.Column(6) <> "" Then
       StrRzFt = StrRzFt & " / " & Me.PED_CODC.Column(6)
    End If

    Print #1, Tab(Round(((47 - Len(StrRzFt)) / 2))); StrRzFt;
    StrRzFt = Empty

    'endereço do cliente - rua e nro

    If IsNull(Me.PED_CODC.Column(5)) = False Or PED_CODC.Column(5) <> "" Then
       StrRzFt = Me.PED_CODC.Column(5)
       StrRzFt = StrRzFt & " Nro: " & Me.PED_CODC.Column(7)
       Print #1, Tab(Round(((47 - Len(StrRzFt)) / 2))); StrRzFt;
    End If

    StrRzFt = Empty

    'endereço do cliente - complemento
    If Me.PED_CODC.Column(Cool <> "" Then
       StrRzFt = Empty
       StrRzFt = Me.PED_CODC.Column(Cool
       Print #1, Tab(Round(((47 - Len(StrRzFt)) / 2))); StrRzFt;
    End If

    StrRzFt = Empty

    'endereço do cliente - bairro - cidade - uf
    If IsNull(Me.PED_CODC.Column(9)) = False Or Me.PED_CODC.Column(9) <> "" Then
       StrRzFt = Me.PED_CODC.Column(9)
    End If

    If IsNull(Me.PED_CODC.Column(10)) = False Or Me.PED_CODC.Column(10) <> "" Then
       StrRzFt = StrRzFt & " - " & Me.PED_CODC.Column(10)
    End If

    If IsNull(Me.PED_CODC.Column(2)) = False Or Me.PED_CODC.Column(2) <> "" Then
       StrRzFt = StrRzFt & " - " & Me.PED_CODC.Column(2)
    End If

    If StrRzFt <> Empty Then
       Print #1, Tab(Round(((47 - Len(StrRzFt)) / 2))); StrRzFt;
    End If

    StrRzFt = Empty

    'telefone
    If IsNull(Me.PED_CODC.Column(11)) = False Or Me.PED_CODC.Column(11) <> "" Then
       StrRzFt = "Fone: " & Me.PED_CODC.Column(11)
    End If

    If IsNull(Me.PED_CODC.Column(12)) = False Or Me.PED_CODC.Column(12) <> "" Then
       StrRzFt = StrRzFt & " - " & "Cel: " & Me.PED_CODC.Column(12)
    End If

    Print #1, Tab(Round(((47 - Len(StrRzFt)) / 2))); StrRzFt;

    StrRzFt = Empty

    'produtos 1

    Print #1, Tab(0); String(47, "-");

    StrRzFt = "*** PRODUTOS ***"
    Print #1, Tab(Round((47 - Len(StrRzFt)) / 2)); StrRzFt;
    StrRzFt = Empty

    Print #1, Tab(0); String(47, "-");

    Print #1, Tab(0); "Codigo";
    Print #1, Tab(16); "Descricao"
    Print #1, Tab(0); "Und";
    Print #1, Tab(12); "QTD";
    Print #1, Tab(26); "PR UNT";
    Print #1, Tab(42); "PR TOT";

    Print #1, Tab(0); String(47, "-");

    'selecionar items do cupon
    Dim StrSQL As String
    Dim rs As DAO.Recordset
    Dim db As DAO.Database

    'Instrução SQL para uso no recordset
    StrSQL = "SELECT IPD_CODI,IPD_DESC,IPD_UND,IPD_QTDE," _
    & "IPD_PRVD FROM Tab_ItensPedidos WHERE IPD_NPED = " & Me.PED_NPED & ";"

    'Seta o Db
    Set db = CurrentDb
    'Seta o Recordset com a SQL
    Set rs = CurrentDb.OpenRecordset(StrSQL)
    Do While Not rs.EOF

    'produtos 2
    Dim StrCodp As String * 15
    Dim StrDesc As String * 32
    StrCodp = rs!IPD_CODI
    StrDesc = rs!IPD_DESC
    Print #1, Tab(0); StrCodp; StrDesc

    'produtos 3
    Dim StrUnd As String * 3
    Dim StrQtde As String * 4
    Dim StrPrUn As String * 8
    Dim StrPtot As String * 9
    StrUnd = rs!IPD_UND
    StrQtde = rs!IPD_QTDE
    StrPrUn = rs!IPD_PRVD
    StrPtot = rs!IPD_QTDE * rs!IPD_PRVD
    Print #1, Tab(0); StrUnd; "       "; Format$(StrQtde, "0000"); "         "; Format$(Format$(StrPrUn, "#,##0.00"), "@@@@@@@@"); "       "; Format$(Format$(StrPtot, "##,##0.00"), "@@@@@@@@@");
    rs.MoveNext
    Loop

    'Fecha o recorset
    rs.Close

    Dim StrCdpgFmpg As String * 12

    'valor total do cupon
    Print #1, Tab(0); String(47, "-");
    Print #1, Tab(0); " "
    Print #1, Tab(0); "Total do pedido --------------->      "; Format$(Format$(Me.TOTP, "##,##0.00"), "@@@@@@@@@")
    Print #1, Tab(0); " "

    StrCdpgFmpg = Empty
    StrCdpgFmpg = PED_CDPG.Column(1)
    Print #1, Tab(0); "Condicoes de pagamento -------->   "; StrCdpgFmpg;

    StrCdpgFmpg = Empty
    StrCdpgFmpg = Me.PED_FMPG
    Print #1, Tab(0); "Forma de pagamento ------------>   "; StrCdpgFmpg;
    Print #1, Tab(0); " "

    If Me.PED_OBSE <> "" Then
       Print #1, Tab(0); "OBSERVACOES:";
       Print #1, Tab(0); Me.PED_OBSE;
    End If

    Print #1, Tab(0); String(47, "-");

    'mensagem de no rodape do cupom
    Print #1, Tab((47 - Len("Este Cupon Não Tem Valor Fiscal")) / 2); "Este Cupon Não Tem Valor Fiscal"
    Print #1, Tab(0); " "
    Print #1, Tab((47 - Len("OBRIGADO PELA PREFERENCIA")) / 2); "OBRIGADO PELA PREFERENCIA"
    Print #1, Tab(0); String(47, "-");
    Print #1, Tab((47 - Len("Carniel Assessoria em Informática")) / 2); "Carniel Assessoria em Informatica";
    Print #1, Tab((47 - Len("Sistemas Customizados")) / 2); "Sistemas Customizados";
    Print #1, Tab((47 - Len("(16)98151-3883 - WhatsApp")) / 2); "(16)98151-3883 - WhatsApp";
    Print #1, Tab(0); String(47, "-");

    Print #1, Chr$(&H1B); "d"; Chr$(2); 'Avança; 2; linhas

    'comando de corte
    If Str2v = 1 Then
       Print #1, Chr(27) + "m"
    Else
       Print #1, Chr(27) + "i"
    End If

    Str2v = Str2v + 1

    If Str2v = 3 Then
       Close #1#
    Else
       GoTo PRT
    End If

    MsgBox "Cupom NÃO FISCAL impresso !", vbInformation, "Ok"

    Me.PED_NPED.SetFocus

    End Sub

    *******************************************************

    Fase 2: ao receber o foco (lá no outro campo)

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Private Sub PED_NPED_GotFocus()

    If EstáCarregado("Frm_DlgImprPed") = True Then
    If Forms![Frm_DlgImprPed]![Aux] = 1 Then
       DoCmd.Close acForm, "Frm_DlgImprPed"
       DoCmd.Close acForm, "Frm_Pedidos"
       DoCmd.OpenForm "Frm_Pedidos"
    End If
    End If

    End Sub

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Mesmo erro !

    A ideia é, "apos" executar os procedimentos que foram comandados no evento "ao receber o foco" eu conseguir fechar e abrir o form novamente.

    Desculpe a postagem longa e enfadonha (rs...) com as separações dos procedimentos no VBA para tentar separar o que cada uma faz.

    Sigo na espera, Basketball
    crysostomo
    crysostomo
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2677
    Registrado : 23/01/2018

    Erro ao fechar e abrir um formulário Empty Re: Erro ao fechar e abrir um formulário

    Mensagem  crysostomo 3/11/2022, 20:36

    Impossível.
    Manda o bd. Fica mais ágil ou faz a depuração e manda só alinha do erro.


    .................................................................................
    Obs.: Coloque somente as partes defeituosas para que possamos encontrar e entender  o problema mais rápido para lhe ajudar. Disponho.
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    Erro ao fechar e abrir um formulário Empty Re: Erro ao fechar e abrir um formulário

    Mensagem  DamascenoJr. 21/11/2022, 02:15

    Minha sugestão

    como já entendido, o formulário que contém o campo não poderá ser fechado enquanto o evento está sendo processado. Minha dica é usar o "timer"

    Coloque no evento timer o código para o fechamento do formulário, e então basta iniciar o timer quando quiser fechar o formulário.

    O problema na lógica da minha dica é que você chama o fechamento e logo em seguida chama uma abertura do mesmo formulário. Dai não entendi essa parte.



    .................................................................................
    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.
    crysostomo
    crysostomo
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2677
    Registrado : 23/01/2018

    Erro ao fechar e abrir um formulário Empty Re: Erro ao fechar e abrir um formulário

    Mensagem  crysostomo 21/11/2022, 11:46

    Manda o foco para outra página, mas como o Damasceno disse; porquê mandar fechar uma e abrir o mesmo?


    .................................................................................
    Obs.: Coloque somente as partes defeituosas para que possamos encontrar e entender  o problema mais rápido para lhe ajudar. Disponho.
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.

    Conteúdo patrocinado


    Erro ao fechar e abrir um formulário Empty Re: Erro ao fechar e abrir um formulário

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 25/4/2024, 01:34