Ejecutar una macro dependiendo de otra macro?

tengo una pequeña duda...

Tengo dos botones con macros uno de ellos dice IMPRIMIR y otro dice REPARTO..

Lo que quiero es que no se pueda ejecutar el botón REPARTO si no se ha impreso nada osea si no le han dado clic al botón IMPRIMIR...

En el botón IMPRIMIR tiene un msgbox el cual pregunta si la impresión es correcta osea que al darle clic a SI este me permita ejecutar el botón REPARTO de lo contrario este quede bloqueado hasta que la impresión haya sido correcta...

2 Respuestas

Respuesta
1

En principio tenés 2 opciones:

1- Mantener inhabilitado el botón REPARTO (si fuese un control ActiveX, la propiedad es Enabled = False) y si el mensaje es SI (correcta la impresión) entonces el control se habilita (Enabled = True). Y al final de la macro REPARTO nuevamente colocas la instrucción Enabled en False.

2- Trabajar con una variable pública (en algún módulo colocá como primer línea:

Public estado as Byte

Y en la rutina de impresión, si el mensaje devuelve SI se coloca:

estado = 1

Y como primer línea en la macro REPARTO, se consulta:

If estado <> 1 Then Exit sub      'es decir que no se ejecuta, podrías agregar algún mensaje:

If estado <>  1 Then 

    MsgBox "Primero se debe ejecutar la impresión."

   Exit sub

End if

Al finalizar la macro de REPARTO colocas nuevamente la variable en 0.

Esta 2da opción es apropiada si tus botones son del tipo Formulario.

Si algo no se ejecuta correctamente debieras dejar escritas aquí como te han quedado las macros.

Sdos

Elsa

Si ag

BOTON IMPRESION: ESTO TENGO

Sub incrementarnumero()
Application.ScreenUpdating = False
Range("I16").Select
ActiveWindow.SmallScroll Down:=-24
Range("F2:Q29").Select
ActiveSheet.PageSetup.PrintArea = "$F$2:$Q$29"
ActiveWindow.SelectedSheets.PrintOut Copies:=2, Collate:=True, _
IgnorePrintAreas:=False
Dim respuesta As Variant
respuesta = MsgBox("la impresion fue correcta?", vbYesNo + vbExclamation, "ADVERTENCIA")
If respuesta = vbYes Then
ActiveSheet.Unprotect password:="28021990"
Rows("11:11").Select
Range("B11").Activate
Selection.EntireRow.Hidden = True
Sheets("NUEVO SERVICIO A DOMICILIO").Protect password:="28021990"
End If
If respuesta = vbNo Then
ActiveSheet.Unprotect password:="28021990"
Range("Q11").Select
Selection.Locked = True
Selection.FormulaHidden = False
Sheets("NUEVO SERVICIO A DOMICILIO").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
ActiveSheet.Protect password:="28021990"
End If
End Sub

BOTON DE REPARTO: ESTO TENGO

Sub NUEVO_SERVICIO_HISTORIAL_SERVICIO()
'
' NUEVO_SERVICIO_HISTORIAL_SERVICIO Macro
' CREA HISTORIAL DEL SERVICIO
'
' Acceso directo: Ctrl+Mayús+U
Application.ScreenUpdating = False
Range("G9").Select
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("A3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("G10").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("B3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("I11").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("C3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("E6").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("D3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Range("E3501").Select
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("G18").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("G19").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("F3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("G20").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("G3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
ActiveWindow.SmallScroll ToRight:=2
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("G21").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("H3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("G22").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("I3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("G23").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("J3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
ActiveWindow.SmallScroll ToRight:=1
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("G24").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("K3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
ActiveWindow.SmallScroll ToRight:=1
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("Q14").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("L3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("H14").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("HISTORIAL SERV. ENTREGADOS").Select
Range("M3501").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
Range("A4:M3501").Select
Range("A3501").Activate
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("HISTORIAL SERV. ENTREGADOS").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("HISTORIAL SERV. ENTREGADOS").Sort.SortFields.Add _
Key:=Range("D4:D3501"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("HISTORIAL SERV. ENTREGADOS").Sort
.SetRange Range("A4:M3501")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A4").Select
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("F18:F24").Select
Selection.ClearContents
Range("Tabla4[CLAVE]").Select
Selection.ClearContents
Range("Q11").Select
ActiveSheet.Unprotect password:="28021990"
Selection.ClearContents
Range("Q18").Select
ActiveWindow.SmallScroll Down:=6
Range("O27").Select
Selection.ClearContents
Range("P27").Select
ActiveWindow.SmallScroll Down:=-6
Range("Q20").Select
ActiveWindow.SmallScroll Down:=-9
ActiveWindow.SmallScroll Down:=3
ActiveWorkbook.Save
Sheets("REPORTE DE SERVICIOS").Unprotect password:="28021990"
Range("G9").Select
Selection.Copy
Range("L24").Select
Sheets("REPORTE DE SERVICIOS").Select
ActiveWindow.SmallScroll Down:=6
Range("B3503").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("E6").Select
Application.CutCopyMode = False
Selection.Copy
Range("L24").Select
Sheets("REPORTE DE SERVICIOS").Select
Range("C3503").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Range("H14").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("REPORTE DE SERVICIOS").Select
Range("D3503").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Range("B6:D3503").Select
Range("B3503").Activate
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("REPORTE DE SERVICIOS").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("REPORTE DE SERVICIOS").Sort.SortFields.Add Key:= _
Range("C6:C3503"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("REPORTE DE SERVICIOS").Sort
.SetRange Range("B6:D3503")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B6").Select
Sheets("NUEVO SERVICIO A DOMICILIO").Select
Sheets("REPORTE DE SERVICIOS").Protect password:="28021990"
Range("A1").Value = Range("A1").Value + 1
Rows("11:11").Select
Range("B11").Activate
Selection.EntireRow.Hidden = False
Range("Q17").Select
Selection.ClearContents
Range("Q11").Select
Selection.Locked = False
Selection.FormulaHidden = False
Sheets("NUEVO SERVICIO A DOMICILIO").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
Application.ScreenUpdating = False
Sheets("NUEVO SERVICIO A DOMICILIO").Protect password:="28021990"
End Sub

en la actualidad podemos darle clic al botón REPARTO y sin pasar por la impresión... pero se necesita que si la impresión SI fue correcta entonces me permita darle clic a REPARTO... los botones por así decirlo son imágenes que le asigne macros...

Bien, al inicio de un Módulo coloca esta línea:

Public estado as Byte

En la macro de IMPRESIÓN, donde tenés la pregunta:

If respuesta = vbYes Then
   estado = 1 
   'siguen tus instrucciones

En la macro de REPARTO:

Sub NUEVO_SERVICIO_HISTORIAL_SERVICIO()
'
' NUEVO_SERVICIO_HISTORIAL_SERVICIO Macro
' CREA HISTORIAL DEL SERVICIO
'
' Acceso directo: Ctrl+Mayús+U
If estado <> 1 Then
    Msgbox "Todavía no se imprimió"
    Exit Sub
End If
'vuelvo a colocar en 0 la variable para futuras ejecucuiones
estado = 0 
'siguen tus instrucciones

PD) Cuando terminemos este tema podés dejarme una nueva consulta para que te depure un poco la macro de REparto ;)

Sdos

Elsa

Respuesta
1

Una opción es guardar en una hoja en alguna celda un valor.

Pon la siguiente macro en los eventos de workbook

Private Sub Workbook_Open()
'por.Dante Amor
    Sheets("hoja1").Range("P1") = 0
End Sub

Con lo anterior, le indicamos que no hay impresiones.


Ahora en tu macro de IMPRIMIR pones esto:

Sub Imprimir()
'Por.Dante Amor
    Sheets("Hoja2").PrintOut Copies:=1, Collate:=True
    resp = MsgBox("la impresión es correcta", vbYesNo, "Título")
    If resp = vbYes Then
        Sheets("hoja1").Range("P1") = 1
    Else
        Sheets("hoja1").Range("P1") = 0
    End If
End Sub


Y en tu macro de reparto pones esto:

Sub Reparto()
'Por.Dante Amor
    If Sheets("hoja1").Range("P1") = 1 Then
        '
        'En esta parte pones el código de reparto
        '
        Sheets("hoja1").Range("P1") = 0
    Else
        MsgBox "Para realizar el Reparto, primero tienes que imprimir", vbExclamation
    End If
End Sub

Prueba y me cometas si tienes dudas.

Si quieres otra opción envíame tu archivo para adaptarla.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario y el título de esta pregunta.

Avísame en esta pregunta cuando me lo hayas enviado.

Saludos. Dante Amor


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas