Macro VBA [Excel] - Formulario_Error

Quisiera su ayuda:
Tengo este código VBA en el Botón de un formulario (macro).
Private Sub CommandButton3_Click()
    Range("B18:I26").Select
    With Selection.Font
        .Name = "Arial"
        .Size = 8
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlCenter
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
    End With
' Macro2 Macro
' Macro grabada el 17/10/2009 por UFenix
    Sheets("Pets Base").Select
    Range("I1").Select
    Selection.Copy
    Sheets("Pets Vivo").Select
    Range("H6:I6").Select
    ActiveSheet.Paste
    Sheets("Pets Base").Select
    Range("H7:I7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Pets Vivo").Select
    Range("H7:I7").Select
etc... Etc...
End Sub
El problema está que el botón (copy) solo se activa cuando has presionado dos botones anteriores, que son los que desprotegen las hojas que por default están protegidas.
Por lo tanto cuando apretás el botón "copy" sin haber apretado los dos anteriores te sale una ventana de visual basic con un mensaje: se ha producido un error '10040' en el tiempo de ejecución... Finalizar / Depurar / Ayuda.
Lo que yo quisiera es que me salga una ventana que diga:
Alerta: Para poder utilizar esta función usted debió haber presionado el BOTÓN Nº1 y el BOTÓN Nº2 de la "Ventana de opciones". (Por favor vuelva).
Y te salga un botón para volver a la ventana de opciones.
¿Es posible?...

1 respuesta

Respuesta
1
Haz lo siguiente :
Debajo de la Primera linea de tu macro coloca :
      On Error GoTo MensajeError
Encima de la última linea de tu macro coloca:
     Exit Sub
MensajeError:
      MsgBox "Alerta: Para poder utilizar esta función usted debió haber presionado el BOTON Nº1 y el BOTON Nº2 de la ""Ventana de opciones"". (Por favor vuelva). "
Entonces tu macro quedaría asi :
Private Sub CommandButton3_Click()
On Error GoTo MensajeError   
    Range("B18:I26").Select
    With Selection.Font
        .Name = "Arial"
        .Size = 8
etc... etc... etc...
     Exit Sub
MensajeError:
      MsgBox "Alerta: Para poder utilizar esta función usted debió haber presionado el BOTON Nº1 y el BOTON Nº2 de la ""Ventana de opciones"". (
Hola, gracias por tu respuesta, me sirvió el código a la perfección.
Por otro lado como te dije antes hay dos botones que se tienen que activar para que funcione el copy.
En el caso de BOTÓN Nº1 quisiera me apareciera una ventana de error tbm: Lo intente guiándome con el ´código anterior pero los resultados al ejecutarlos son negativos ya que no surten efecto puesto que no se abre ninguna ventanita de error:
Private Sub CommandButton1_Click()
 On Error GoTo MensajeError
    Sheets("Pets Vivo").Select
    ActiveSheet.Unprotect
 Exit Sub
MensajeError:
      MsgBox "Alerta: Usted acaba de quitar la protección a la hoja de PETS BASE, por favor haga los cambios necesarios sin afectar el formulario ni alterar la configuración de impresión. "
End Sub
y en el caso del BOTON Nº2
Private Sub CommandButton2_Click()
 On Error GoTo MensajeError
    Sheets("Pets Base").Select
    ActiveSheet.Unprotect
 Exit Sub
MensajeError:
      MsgBox "Alerta: Usted acaba de quitar la protección a la hoja de PETS VIVO debido a que es la única opción para utilizar el botón "COPY PETS VIVO", por favor haga los cambios necesarios sin afectar el formulario ni alterar la configuración de impresión.
End Sub
Espero que puedas ayudarme, agradezco tu tiempo y tu comprensión.
La opción On Error se usa para prevenir y controlar cualquier rutina de error, y solo se activa si se produce algún error.
Para el caso del botón 1 y 2, el único error que podría haber es que no existan las hojas "Pets Vivo" o "Pets Base".
Para estos botones, tu no necesitas mensajes de error sino mensajes de información. Para lograrlo, quita las lineas On Error, Exit Sub y MensajeError:
Mil disculpas no tenía idea sobre los mensajes de error y mensajes de información.
Dio resultados favorables.
Funciona a la perfección:
Ahora una última pregunta:
Para que me salga un mensaje al cerrar el formulario (ventana de opciones).
¿Está seguro(a) que quiere salir de la ventana de opciones?
Si/No
he encontrado en el internet estos códigos pero no funcionan:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim msgvar As String
Select Case UnloadMode
Case 0
    msgvar = MsgBox("Se cierra desde el menu de control." & Chr$(10) _
    & "¿Está seguro(a) de querer salir?", 36, "CERRAR")
    If msgvar <> 6 Then Cancel = True
Case 2
    msgvar = MsgBox("Se cierra desde el administrador de tareas." & Chr$(10) _
    & "¿Quiere salir de verdad?", 36, "CERRAR")
    If msgvar <> 6 Then Cancel = True
Case 3
    msgvar = MsgBox("Se cierra la sesión de Windows XP." & Chr$(10) _
    & "¿Quiere salir de verdad?", 36, "CERRAR")
    If msgvar <> 6 Then Cancel = True
Case 4
    msgvar = MsgBox("El formulario MDI se cierra." & Chr$(10) _
    & "¿Quiere salir de verdad?", 36, "CERRAR")
    If msgvar <> 6 Then Cancel = True
End Select
Usa este código :
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Salir = MsgBox("¿Está seguro(a) que quiere salir de la ventana de opciones?", vbYesNo + vbDefaultButton2 + vbQuestion, "Mensaje de .....")
    If Salir = vbNo Then Cancel = True
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas