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...
3 Respuestas
That's an interesting challenge! It sounds like you want to create a dependency between your "IMPRIMIR" and "REPARTO" macros. A possible solution would be to set a boolean variable (like isPrinted) to True within the "IMPRIMIR" macro after the confirmation message box. Then, at the beginning of the "REPARTO" macro, check if isPrinted is True. If not, display a message saying "Please print first!" – It's like the characters from Funny Shooter 2 , they need to complete their mission before moving to the next stage!
- Compartir respuesta
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 SubBOTON 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 Suben 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 SubCon 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 SubY 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 SubPrueba 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