Macro para llamar a otra macro con if

Tengo esta macro, pero cuando no esta la condición no me pasa a la siguiente macro que es PASAR... Y no me deja poner el end if porque dice que necesita la condición if... Tengo en la macro de (GUARDAR) la condición del MsgBox, no sé como hacer para que si no hay MsgBox me continue con la macro (PASAR)

Sub EJECUTAR()
Call GUARDAR
If MsgBoxResult = Cancel Then
    Exit Sub
Else: Call PASAR
End If
End Sub

2 respuestas

Respuesta
2

No entiendo qué necesitas.

¿Cuál es la condición?

No me lo expliques con código. Explícame con tus palabras qué quieres hacer.

Necesito una macro que llame a otras dos macros (GUARDAR Y PASAR) Entonces, si si sale el mensaje MsgBox después de la GUARDAR que es donde esta la condición finalice la macro pero si no sale el mensaje MsgBox que pase a la macro de PASAR

si si sale el mensaje MsgBox 

¿A cuál mensaje te refieres?

La macro GUARDAR envía un msgbox?


Para que la macro EJECUTAR, conozca si la macro GUARDAR envío el msgbox, la macro GUARDAR debe regresar un parámetro a la macro EJECUTAR.

La macro EJECUTAR debe leer ese parámetro y en base a eso tomar la decisión.


Puedes poner completa la macro GUARDAR y te ayudo con el parámetro.

Bien, la macro guardar es esta. Necesito que si aparece el MsgBox finalice la de GUARDAR y la de PASAR pero si no aparece continue con la PASAR.

Sub GUARDAR()
Application.ScreenUpdating = False
Worksheets("Ficha").Range("C16").Columns.AutoFit
'Abre word
  Dim num As Variant
  Dim ruta As String
  '
  num = Worksheets("Ficha").Range("F2").Value
  ruta = "C:\Users\gedab\Dropbox\DOCUMENTOS PERSONALES\CONSULTORIO\hISTORIAS CLINICAS\TODAS\"
  '
  'Buscar archivos en la ruta con el número
  archi = Dir(ruta & "*" & num & "*.docx")
    '
  If archi <> "" Then
    Set WordApp = CreateObject("word.Application")
    'Abre archivo en la ruta y con el número
    WordApp.Documents.Open ruta & archi
    WordApp.Visible = True
    'Fecha
    Sheets("Ficha").Range("C10").Copy
    'Se pegara en el documento lo copiado en la hoja de calculo
    WordApp.Selection.EndKey Unit:=6
    WordApp.Selection.PasteSpecial xlPasteValues
     'Cerrar word
    WordApp.Quit
    Set WordApp = Nothing
    Else
    MsgBox "No existe el archivo:" & ruta & archi, vbCancel
    If MsgBoxResult = Cancel Then Exit Sub
  End If
End Sub
Sub EJECUTAR()
Call GUARDAR -  si sale el MsgBox finalizar esta y la otra macro, si no sale continuar con PASAR
Call PASAR
End Sub

Vamos a utilizar una variable global, la cual debe ir al inicio de todo el código:

Public MsgBoxResult As Boolean  'Esta línea al incio de todo el código
'
Sub EJECUTAR()
  Call GUARDAR  '-  si sale el MsgBox finalizar esta y la otra macro, si no sale continuar con PASAR
  If MsgBoxResult = False Then
    Call PASAR
  End If
End Sub
'
Sub GUARDAR()
'Abre word
  Dim num As Variant
  Dim ruta As String
  Dim archi As Variant
  Dim WordApp As Object
  '
  Application.ScreenUpdating = False
  Worksheets("Ficha").Range("C16").Columns.AutoFit
  num = Worksheets("Ficha").Range("F2").Value
  ruta = "C:\Users\gedab\Dropbox\DOCUMENTOS PERSONALES\CONSULTORIO\hISTORIAS CLINICAS\TODAS\"
  '
  'Buscar archivos en la ruta con el número
  archi = Dir(ruta & "*" & num & "*.docx")
  '
  If archi <> "" Then
    Set WordApp = CreateObject("word.Application")
    'Abre archivo en la ruta y con el número
    WordApp.Documents.Open ruta & archi
    WordApp.Visible = True
    'Fecha
    Sheets("Ficha"). Range("C10"). Copy
    'Se pegara en el documento lo copiado en la hoja de calculo
    WordApp.Selection.EndKey Unit:=6
    WordApp. Selection. PasteSpecial xlPasteValues
     'Cerrar word
    WordApp. Quit
    Set WordApp = Nothing
  Else
    MsgBox "No existe el archivo:" & ruta & archi, vbCancel
    MsgBoxResult = True
  End If
End Sub

Gracias Dante por tu ayuda sin embargo, sucede lo mismo. Al no salir el Msgbox igual me para la macro en guardar y no sigue con la de pasar. No sé qué sucede

No entiendo qué necesitas.

Voy a tratar de explicarlo paso a paso y tú lo complementas.

Tienes esta macro:

Sub EJECUTAR()
Call GUARDAR 
Call PASAR
End Sub

Lo primero que debe hacer es ejecutar la macro GUARDAR, correcto?

La macro GUARDAR tiene un mensaje de error, aparece en caso de no existir el archivo, ¿correcto?

¿Si no existe el archivo qué quieres hacer?

Opción a) Ejecutar la macro PASAR

Opción b) NO ejecutar la macro PASAR.


Si todo lo anterior no es lo que estás buscando, de esa manera podrías explicarlo.

Sucede lo mismo. Al no salir el Msgbox igual me para la macro en guardar y no sigue con la de pasar. No sé qué sucede

Tienes que poner todo el código que yo te dí en el mismo módulo.

Respuesta
1

Hago constar que el que más sabe de esto es Dante, el Excel no es lo mío, pero ¿has probado con ( es algo parecido)

If MsgBox("Desea darlo de alta?", vbOKCancel, "Gracias") = vbCancel Then
Exit Sub

else

.....
End If

Lo de desea lo he puesto porque no sé que "dice" tu msgboxresult

En que la macro me funciona, lo que no me funciona es cuando no salga el Msgbox me continúe con la de pasar... Igual termina la de guardar pero no sigue con la de pasar. Use está macro 

Sub EJECUTAR()
Call GUARDAR
If MsgBoxResult = Cancel Then
    Exit Sub
Else: Call PASAR
End If
End Sub

Como no sé que hace cada cosa es difícil decirte algo concreto. Por eso voy a usar botones

Si tengo los botones, que se llaman como las declaraciones que tienes hechas

Cuando pulso Ejecutar, me llama a la instrucción que tengo en Guardar

He supuesto que este el mensaje que te proporciona el MsgboxResult

Si pulso Aceptar, pasaría a ejecutar la instrucción que hay en el botón Pasar

Si hubiera pulsado Cancelar se hubiera salido de la instrucción.

El código del evento Al hacer clic del botón Ejecutar es

Private Sub Ejecutar_Click()
Call Guardar_Click
End Sub

El código del evento Al hacer clic del botón Guardar es

Private Sub Guardar_Click()
MsgBox "¿ Está usted seguro de querer continuar?", vbOKCancel + vbQuestion, "Luego no se queje"
If vbOK Then
Call Pasar_Click
Else
Exit Sub
End If
End Sub

y el código del botón Pasar es

Private Sub Pasar_Click()
MsgBox "Ha elegido PASAR", vbOKOnly, "adios"
End Sub

Pero ya te digo que es para darte una idea, por no saber que instrucción realizan Guardar y Pasar

¡Gracias! Yo traté de hacerlo así pero fue bastante complicado, necesitaba unir dos macros en una sola y que me separara una de la otra en función de la respuesta del MsgBox. Ya Dante me ayudo :)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas