VB mensaje confirmación al imprimir no me funciona

Hola Elsa, por fis necesito que me ayudes , tengo este código :

Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Name = CA Then
Dim Mensaje, Resp
Mensaje = El Ticket es el & [j5] 'Actual
Mensaje = Mensaje & Es correcto? Desea Imprimir?
Resp = MsgBox(Mensaje, vbQuestion + vbYesNo)
On Error GoTo errNoPrint
If Resp = vbYes Then
Application.EnableEvents = False
End If
Exit Sub
errNoPrint:
Cancel = True
Application.EnableEvents = True
End Sub

SE supone que al enviar a imprimir debe de salir un mensaje indicando el N° del Ticket que deseo imprimir, y si es correcto o no , se elige la opción , pero al enviar a procesar la información que tengo.. No me funciona.. Estoy haciendo algo mal?

saludos afectuosos

1 Respuesta

Respuesta
1

No soy Elsa pero t respondo igualmente.

¿Qué es lo que no te funciona? ¿Te sale el mensaje con la pregunta? ¿O lo que no te funciona es al cancelar?

Hola , gracias por contestar.. te lo agradezco.. bueno como decía...

no me funciona para nada.. absolutamente en nada... ya he revisado una y otra vez.. pero ni siquiera .. a parece un mensaje de error o de compilación.. simplemente creo que pasa por alto ... y va directo a imprimir...

esta ingresado en el thisworkbook ..

asi que no se que hacer.. ya he revisado otros códigos que he encontrado.. he tratado de adaptarlos, pero como no se muy bien esto de macros, estoy en pañales.. estoy leyendo.. y probando y probando.. por fis... me puedes indicar en que parte tal vez falte una linea..

te lo agradezco..

saludos

desde Ecuador

Has puesto un punto de interrupción en el private sub para ver si se ejecuta el procedimiento?, supongo que tu problema esta en el activesheet. Name, no se si las comillas te han desaparecido al copiar y pegar, pero el nombre de la hoja tendría que ir entre comillas "CA", agrega al principio de tu código la sentencia

msgbox (activesheet.name)

Y haber que sale

Hola.. te cuento que si están las comillas, tan me falta un end if..

agregue la linea que decías... ok..

me sale un mensaje pequeño donde dice : CA / con botón de aceptar , esto supongo que es para aceptar si es la hoja CA.. ok.. listo.. doy aceptar. luego efectivamente me sale la ventana donde me indica que confirme si es el ticket N°... ... ok.. esta bien... si doy "canelar"

de todas maneras se me activa la impresora y procede a imprimir..

como te puedo enviar un archivo de la IMPR PANT que le saque al proceso.. ?

gracias

Eso ya me lo imaginaba, porque el código lo tienes mal, pero me resultaba raro que ni siquiera te saliera el msgbox con la pregunta.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

On Error GoTo errNoPrint
If ActiveSheet.Name = "CA" Then
Dim Mensaje as string

Dim Resp as Integer
Mensaje = "El Ticket es el " & [j5] & " Es correcto?" & vbcrlf & "¿Desea Imprimir?"
Resp = MsgBox(Mensaje, vbQuestion + vbYesNo)
If Resp = vbYes Then

'
Else

Cancel = True

end if
Exit Sub

errNoPrint:

cancel = True
msgbox (err.description)
End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)

On Error GoTo errNoPrint
If ActiveSheet.Name = "CA" Then
Dim Mensaje as String

Dim Resp as Integer
Mensaje = "El Ticket es el " & [j5] & ". ¿Es correcto?" & vbcrlf & "¿Desea Imprimir?"
Resp = MsgBox(Mensaje, vbQuestion + vbYesNo)
If Resp = vbYes Then
'

else

cancel = True

End If

End if
Exit Sub
errNoPrint:
Cancel = True
msgbox(err.description)
End Sub

Gracias Maestro, me has salvado después de algunos días de ojeras por leer y probar tanto..

solo una cosa más.. en donde estaba el error.. por que se cambio algunas lineas de lugar

?..

desde Ecuador.. mil gracias

Unas aclaraciones al respecto de tu código, al margen del end if que te faltaba:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Name = CA Then
Dim Mensaje, Resp 'Las variables siempre hay que declarar de que tipo son, pues aunque no es obligatorio, sino se hace te crea variables variant, que aparte de consumir mas recursos te impiden controlar correctamente los errores que se produzcan por introducir datos distintos de los esperados en las variables.
Mensaje = El Ticket es el & [j5] 'Actual 'Si puedes hacer en mensaje en una linea, porque usas dos?
Mensaje = Mensaje & Es correcto? desea Imprimir?
Resp = MsgBox(Mensaje, vbQuestion + vbYesNo)
On Error GoTo errNoPrint '
If Resp = vbYes Then
Application.EnableEvents = False 'Esto esta francamente mal, ¿porque desactivas los eventos para imprimir?, pero lo realmente malo de esto es que solo vuelves a activar los eventos si se produce un error, pues el enableevents = True lo has puesto dentro de la subrutina errNoPrint y esa subrutina SOLO se ejecuta cuando hay un error, por eso es una subrutina, el código del Private sub termina con el Exit Sub.

Asi que ha partir de entonces los eventos ya no se ejecutaran en tu programa, pues los has desactivado y no los has vuelto a activar, y de ahi la razon del porque no te mostraba el mensaje, pues el evento Beforeprint ya no se ejecutaba despues de haberlo ejecutado una vez. Mucho cuidado con desactivar los eventos, que como luego no los vuelvas a activar, te puedes volver loco buscando el porque el programa no te funciona xD
End If
Exit Sub
errNoPrint:
Cancel = True
Application.EnableEvents = True 'Como te he dicho, esto aqui no pinta nada
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas