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
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
- Compartir respuesta
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
- Compartir respuesta