Foros del Web » Soporte técnico » Ofimática »

anular orden de msgbox?

Estas en el tema de anular orden de msgbox? en el foro de Ofimática en Foros del Web. Tengo el siguiente msgbox: msbTexto = "Vas a imprimir einnnn? estás seguro?" msbTitu = "Hola" msbOpc = vbOKCancel + vbQuestion + vbDefaultButton1 Select Case MsgBox(msbTexto, ...
  #1 (permalink)  
Antiguo 13/03/2006, 03:03
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 0
anular orden de msgbox?

Tengo el siguiente msgbox:

msbTexto = "Vas a imprimir einnnn? estás seguro?"
msbTitu = "Hola"
msbOpc = vbOKCancel + vbQuestion + vbDefaultButton1
Select Case MsgBox(msbTexto, msbOpc, msbTitu)
Case vbOK 'Aceptar
'
Case vbCancel 'Cancelar

End Select

El problema es que cuando hago click en el botón cancelar me imprime cuando sólo debería imprimir si pinchara en el botón aceptar. Alguna idea?, muchas gracias
  #2 (permalink)  
Antiguo 13/03/2006, 04:12
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 11 meses
Puntos: 144
Código:
msbTexto = "Vas a imprimir einnnn? estás seguro?"
msbTitu = "Hola"
msbOpc = vbOKCancel + vbQuestion + vbDefaultButton1
msbRespuesta = MsgBox(msbTexto, msbOpc, msbTitu)
Select Case msbRespuesta
    Case vbOK 'Aceptar
        ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Case vbCancel 'Cancelar
        'Si quieres que haga algo, ponlo aquí,
        'y si no quieres que haga nada, quita este "case".
        'Si decides quitarlo, en lugar de usar un select case,
        'yo usaría un condicional (IF), de esta forma:
        'If msbRespuesta = vbOK Then ActiveWindow.SelectedSheets.PrintOut Copies:=1
        'así nos ahorramos escribir líneas
End Select
  #3 (permalink)  
Antiguo 13/03/2006, 04:30
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 0
msbTexto = "Vas a imprimir einnnn? estás seguro?"
msbTitu = "Hola"
msbOpc = vbOKCancel + vbQuestion + vbDefaultButton1
msbRespuesta = MsgBox(msbTexto, msbOpc, msbTitu)
Select Case msbRespuesta
Case vbOK 'Aceptar
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Case vbCancel 'Cancelar
Sheets("hoja2").Select
Range("A1").Select
End Select
  #4 (permalink)  
Antiguo 13/03/2006, 04:32
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 0
Con este código le pido que si pincho en cancelar me vaya a la hoja 2 celda a1, y me va pero después me imprime?? ejecuta las dos órdenes cuando debería ejecutar sólo una.
  #5 (permalink)  
Antiguo 13/03/2006, 04:52
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 11 meses
Puntos: 144
Pues a mí, esto me funciona perfectamente. Solo imprime si seleccionas el botón "Aceptar":
Código:
Sub prueba()
msbTexto = "Vas a imprimir einnnn? estás seguro?"
msbTitu = "Hola"
msbOpc = vbOKCancel + vbQuestion + vbDefaultButton1
msbRespuesta = MsgBox(msbTexto, msbOpc, msbTitu)
Select Case msbRespuesta
    Case vbOK 'Aceptar
        ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Case vbCancel 'Cancelar
        Sheets("hoja2").Select
        Range("A1").Select
End Select
End Sub
¿No será que por algún lado tienes una línea de código, que lo que hace es imprimir la hoja en la que estás en ese momento?.
  #6 (permalink)  
Antiguo 13/03/2006, 05:06
 
Fecha de Ingreso: noviembre-2005
Mensajes: 170
Antigüedad: 19 años
Puntos: 1
El código de 3pies es correcto. Comprueba bien lo que te comenta de que tengas alguna línea de código no deseada o puede que al cerrar alguna función no lo hagas donde debes y te parece que la línea esta bien pero no bien situada.
Si no lo solucionas haz un copy-paste de toda esa función y lo pones en el foro para echarle un vistazo. Muchas veces nos obsesionamos con algo y un segundo punto de vista nos saca de nuestro error.
__________________
El sabio no dice nunca todo lo que piensa,
pero siempre piensa todo lo que dice.
Aristóteles :pensando:
  #7 (permalink)  
Antiguo 13/03/2006, 05:27
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 0
En el código le mando que salga el msgbox con dos botones si le doy a aceptar me imprime y si le doy a cancelar me lleva a la hoja que le ordeno pero mi imprime de todas formas. El resto del código (que me había pasado 3pies y que yo adapte a mi herremienta) establece que solo debe imprimir aquellas celdas de aquellas hojas (las cuales yo he indicado en el código) que están rellenadas.


Sub Imprimir_solo_si_hay_datos()


msbTexto = "Vas a imprimir einnnn? estás seguro?"
msbTitu = "Hola"
msbOpc = vbOKCancel + vbQuestion + vbDefaultButton1
msbRespuesta = MsgBox(msbTexto, msbOpc, msbTitu)
Select Case msbRespuesta
Case vbOK 'Aceptar
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Case vbCancel 'Cancelar
Sheets("hoja2").Select
Range("A1").Select
End Select

Application.ScreenUpdating = False

Hoja1.Select

For i = 1 To Sheets.Count

If i = 1 Then If Range("d7") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1
ElseIf i = 4 Then If Range("d68") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1

ElseIf i = 2 Then
If Range("b17") <> "" Then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1
If Range("b39") <> "" Then ActiveWindow.SelectedSheets.PrintOut From:=2, To:=2, Copies:=1
If Range("b61") <> "" Then ActiveWindow.SelectedSheets.PrintOut From:=3, To:=3, Copies:=1
If Range("b83") <> "" Then ActiveWindow.SelectedSheets.PrintOut From:=4, To:=4, Copies:=1
End If
If i < Sheets.Count Then ActiveSheet.Next.Select
Next

Application.ScreenUpdating = True
Sheets("menuprincipal").Select
Range("A1").Select
End Sub


no sé cual puede ser el problema??
  #8 (permalink)  
Antiguo 13/03/2006, 05:53
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 11 meses
Puntos: 144
A pesar de haberle dado al botón cancelar, te imprime, porque se ejecuta el código que sigue a ese msgbox (cuando se finaliza el selec case).

Aparte de eso, si le das al botón aceptar del msgbox, y por ejemplo, y en celda B17 de la hoja2 tienes algún dato (por ejemplo), te imprimirá 2 veces esa página: una por el "aceptar" del msgbox, y otra por cumplirse lo que hay dentro del bucle "for".

Para solucionar ambas cosas, pon esto:
Código:
Sub Imprimir_solo_si_hay_datos()
Application.ScreenUpdating = False
msbTexto = "Vas a imprimir einnnn? estás seguro?"
msbTitu = "Hola"
msbOpc = vbOKCancel + vbQuestion + vbDefaultButton1
msbRespuesta = MsgBox(msbTexto, msbOpc, msbTitu)
Select Case msbRespuesta
Case vbOK 'Aceptar
    Hoja1.Select
    For i = 1 To Sheets.Count
        If i = 1 Then
            If Range("d7") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1
        ElseIf i = 4 Then
            If Range("d68") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1
        ElseIf i = 2 Then
            If Range("b17") <> "" Then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1
            If Range("b39") <> "" Then ActiveWindow.SelectedSheets.PrintOut From:=2, To:=2, Copies:=1
            If Range("b61") <> "" Then ActiveWindow.SelectedSheets.PrintOut From:=3, To:=3, Copies:=1
            If Range("b83") <> "" Then ActiveWindow.SelectedSheets.PrintOut From:=4, To:=4, Copies:=1
        End If
        If i < Sheets.Count Then ActiveSheet.Next.Select
    Next
Case vbCancel 'Cancelar
    Sheets("hoja2").Select
    Range("A1").Select
    'La siguiente línea la puedes poner si deseas que el usuario no sea redirigido a la hoja llamada "menuprincipal"
    exit sub
End Select
Sheets("menuprincipal").Select
Range("A1").Select
Application.ScreenUpdating = True
End Sub

Última edición por 3pies; 13/03/2006 a las 05:59
  #9 (permalink)  
Antiguo 13/03/2006, 05:56
 
Fecha de Ingreso: noviembre-2005
Mensajes: 170
Antigüedad: 19 años
Puntos: 1
Estoy un poco confundido.
Tu quieres que cuando le des Aceptar te imprima las hojas seleccionadas y me imagino que solo tendrás la actual y después que te imprima todas las hojas que cumplan unos criterios determinados.
¿Si le das a Cancelar quieres que no te imprima NINGUNA hoja? Entonce tu código está mal. Con el actual te situa en la hoja 2 en A1 y luego recorre las hojas e imprime las que cumplan los criterios. Para evitar esto mete, no copies, desde "Application.ScreenUpdating = False" hasta "Range("A1").Select" dentro del case de OK y creo que tendrás lo que deseas. Incluso yo sustituiría la línea de "ActiveWindow.SelectedSheets.PrintOut Copies:=1" por todo lo que te he dicho que muevas, porque puedes imprimir dos veces la misma hoja.
Ya me dirás
__________________
El sabio no dice nunca todo lo que piensa,
pero siempre piensa todo lo que dice.
Aristóteles :pensando:
  #10 (permalink)  
Antiguo 13/03/2006, 06:17
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 0
Ambas soluciones me dan un error "Subíndice fuera de intervalo" , cuando pincho en cancelar si pincho en aceptar me imprime correctamente.
  #11 (permalink)  
Antiguo 13/03/2006, 06:30
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 11 meses
Puntos: 144
Lo tuyo son Expedientes X. A mí me funciona perfectamente, sobre un libro con 4 hojas (de 4, porque busca en la hoja 4, con el bucle for, si le das al "aceptar" en el msgbox). ¿Ya copiaste y pegaste ese código tal y como lo puse?.
  #12 (permalink)  
Antiguo 13/03/2006, 06:45
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 10 meses
Puntos: 0
Ya está solucionado creo que el error era porque
Case vbCancel 'Cancelar
Sheets("hoja2").Select
Range("A1").Select
en vez de hoja2 debía poner menuprincipal ya que ninguna hoja se llama hoja2.
Muchas gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:55.