crysostomo boa tarde com frio aqui em Ribeirão Preto
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(
<> "" Then
StrRzFt = Empty
StrRzFt = Me.PED_CODC.Column(
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,