Excel detecta el clic del ícono para imprimir?

10/02/2008 - 21:50 por ElProfe | Informe spam
Amigos del grupo:

Imagino que Excel puede detectar cuando una persona hace clic
directamente en el ícono para imprimir una hoja o usa el menú
[Archivo] [Imprimir] etc.

La situación es que tengo una pequeña macro que sirve para elaborar
comprobantes de egreso y que funciona mas o menos así:

-Mediante unos inputbox so solicitan y cargan los datos necesarios
para cada egreso (monto a pagar, beneficiario, concepto,
identificación tributaria, centro de costo e imputación contable)

-Una cargados los datos anteriores, se debe hacer clic en un botón
[Actualizar] para que se generen una serie de registros (diferentes
combinaciones de los datos anteriores) en un rango escondido pero de
la misma hoja.

-Hecha la "Actualización" de registros, aparece una caja que pregunta
si "Se almacena la información o no", en cuyo caso afirmativo todo se
traslada a una base de datos (en una hoja oculta)

-Superada la pregunta de almacenamiento, se imprime el comprobante de
ingreso y todo queda listo para un nuevo comprobante.

Lo que sucede (con frecuencia) es que algunos operadores solo cargan
los datos y luego imprimen, saltándose el resto de pasos, logrando
con este olvido que la información no se almacene y que haya que
repetir tiempo después todo el proceso.

Pues bien, con base en todo lo anterior me surge la siguiente
necesidad:

1) Conocer la instrucción en VBA que detecte cuando se quiera
imprimir el egreso (bien sea usando el ícono o el menú) y que
automáticamente "dispare" la Actualización de registros y luego
pregunte si "Se almacena la información o no", para posteriormente
pasar a imprimir.

2) Sería muy útil saber como puedo lograr que con código VBA se
detecte si el número de el egreso a imprimir ya existe en la base de
datos o no, para no repetirlo

Gracias anticipadas por su ayuda.

Cordial saludo,

Manuel

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
11/02/2008 - 00:09 | Informe spam
hola, Manuel !

Imagino que Excel puede detectar... clic... en el icono para imprimir una hoja o... menu [Archivo] [Imprimir] etc.



=> existe el evento '_beforeprint' en el modulo de codigo del libro (ThisWorkbook)

... tengo una... macro... para elaborar comprobantes... que funciona mas o menos asi:
... inputbox... solicitan y cargan los datos
... cargados los datos... se debe hacer clic en... [Actualizar] para que se generen una serie de registros
... aparece una caja que pregunta si "Se almacena la informacion o no" en... caso afirmativo... se traslada a una base de datos...
-Superada la pregunta de almacenamiento, se imprime el comprobante de ingreso y todo queda listo para un nuevo comprobante.
Lo que sucede (con frecuencia) es que algunos operadores solo cargan los datos y luego imprimen, saltandose el resto de pasos
logrando con este olvido que la informacion no se almacene y que haya que repetir tiempo despues todo el proceso.
Pues bien, con base en todo lo anterior me surge la siguiente necesidad:



1) Conocer la instruccion en VBA que detecte cuando se quiera imprimir el egreso (bien sea usando el ícono o el menu)
y que automaticamente "dispare" la Actualizacion de registros y luego pregunte si "Se almacena la informacion o no"
para posteriormente pasar a imprimir.

2) Seria muy util saber como puedo lograr que con codigo VBA se detecte si el numero de el egreso a imprimir
ya existe en la base de datos o no, para no repetirlo



=> es opcional el traslado a la base de datos (o es "obligatorio") ? (en caso de que sea obligatorio)
=> que pasa (o debiera pasar) en caso de contestar "en negativo" a la pregunta de si se almacena o no ?

hablando del evento '_beforeprint' es conveniente que mantengas en perspectiva los siguientes comentarios:
- se activa tanto desde botones de barras de herramientas, como por atajos o menus y comandos
- tambien es "reconocido" si se ejecuta una vista previa de impresion
- si se inicia por una vista previa de impresion, Y se imprime desde este dialogo, se dispara DOS VECES
- no distingue cual es la hoja que se va a imprimir
- tampoco "investiga" si "la hoja en cuestion" esta dentro de una seleccion de varias hojas
(a menos que hagas un "barrido" por las hojas seleccionadas)

una vez "controlados" estos (y quizas otros) imponderables ?... ya estaras en condiciones de...
- verificar (por codigo) si "la hoja en cuestion" va dentro de la seleccion de hojas a imprimirse
- comprobar si "tal dato" (de alguna celda en alguna hoja) ya esta registrado (en otra celda de otra hoja)
- tomar el control de imprimir (o no) antes o despues de realizar otras acciones (segun sea necesario)
- etc. etc. etc.

saludos,
hector.
Respuesta Responder a este mensaje
#2 ElProfe
11/02/2008 - 01:50 | Informe spam
Hola Héctor Miguel:

Gracias por tu atención:

=> existe el evento '_beforeprint' en el modulo de codigo del libro (ThisWorkbook)



R = Coloqué el siguiente código en ThisWorkbook y funcionó bien
haciendo exactamente lo que necesitaba.

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Actualizar 'Llama la subrutina que actualiza y lanza la pregunta
de traslado
End Sub

=> es opcional el traslado a la base de datos (o es "obligatorio") ? (en caso de que sea obligatorio); > => que pasa (o debiera pasar) en caso de contestar "en negativo" a la pregunta de si se almacena o no ?



R = el traslado a la base de datos es "obligatorio" una sola vez por
cada número de egreso, pero en algunos casos se requiere de una
reimpresión del egreso, en cuyo caso no debe haber traslado de
información.

Solo me resta evitar que se traslade un egreso ya existente; la
numeración de los egresos se localiza en la columna "F" de una hoja
denominada "BD" y los egresos se elaboran en una hoja denominada "Egr"
y se numeran en la celda B13 (nombrada NEgre).

Gracias Héctor por tu ayuda; siempre es y será sumamente valiosa!

Saludos,

Manuel
Respuesta Responder a este mensaje
#3 Héctor Miguel
11/02/2008 - 03:45 | Informe spam
hola, Manuel !

Solo me resta evitar que se traslade un egreso ya existente
la numeracion de los egresos se localiza en la columna "F" de una hoja denominada "BD"
y los egresos se elaboran en una hoja denominada "Egr" y se numeran en la celda B13 (nombrada NEgre).



prueba poniendo como primer linea en el procedimiento de actuaizacion [Actualizar] algo +/- como lo siguiente:

If Evaluate("countif(bd!f:f,egr!b13)") Then Exit Sub

o...

If Application.CountIf(Worksheets("bd").Range("f:f"), Worksheets("egr").Range("b13")) Then Exit Sub

saludos,
hector.
Respuesta Responder a este mensaje
#4 ElProfe
11/02/2008 - 06:41 | Informe spam
Héctor:

Agradecimientos sinceros por tu amable ayuda.

Funciona muy bien!

Saludos,

Manuel
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida