¿Es posible al ejecutar una macro, no se ejecuten las que estén en ThisWorkbook?
Necesitaría si es posible al ejecutar una macro, no se ejecuten todo lo que esta escrito en ThisWorkbook.
1 respuesta
Si la macro en cuestión 'disparará' algún otro proceso se coloca antes esta línea:
Application.EnableEvents = False recordando de volverla a colocar en True al finalizar.
Esto hay que revisarlo con detenimiento, no vaya a ser que sí necesites que algo se actualice durante esa macro.
Por ej, si tuviese en el libro (o ThisWorkbook) un evento que se ejecuta al 'seleccionar' las hojas del libro, y una macro que empieza seleccionando una hoja, inhibo la ejecución:
Sub imprimeDoc() 'x Elsamatilde 'recorre la hoja Cheques Application.EnableEvents = False Sheets("CHEQUES").Select 'todo mi código para la impresión 'al finalizar coloco nuevamente los eventos del modo normal Application.EnableEvens = True End Sub
Espero te sirva la explicación. Si te quedan dudas debes colocar el código que tengas en ThisWorkbook y comentar en qué macro o qué hará la otra macro donde quieras inhabilitar este código.
PD) Hay otros métodos como ser utilizando alguna variable pública a la que vas dando valor 0 o 1 para activar o no alguna otra macro, pero no creo sea tu caso.
Sdos y comentame
Gracias Elsa, por contestar
El código es:
Sub PEGAR_CON_VALORES()
' Macro grabada el 07/02/2015 por Luis
'recorre la hoja Cheques
Application.EnableEvents = False
Sheets("CHEQUES").Select
Range("N9").Select
Selection.Copy
Range("M12").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=9
Range("G43").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'al finalizar coloco nuevamente los eventos del modo normal
Application.EnableEvens = True
End Sub
Me da error en:
Sheets("CHEQUES").Select
Y despues me da en:
Application.EnableEvens = True
Despues de Borrarlo, me pega todo en 50 hojas agrupadas.
El codigo que quiero interrumpir es:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Select Case Sh.Name
Case "Contado", "Adra Paco", "Balerma Trini", "El Ejido Adelina", "Berja Gador", "Adra Maria", "Iznajar Pepa", "Lucena Rafaela", "Lucena Carmen", "Benameji Juan", "Badolatosa Mª Jose", "Casariche Carmen", "Gilena Aurelia", "F. Piedra Antonia", "Humilladero Victoria", "Benameji Sole", "Galerias Fernandez", "Fuengirola Paco", "Fuengirola Charo", "Fuengirola Rosalia", "La Cala Antonia", "Marbella Juani", "Marbella Sara", "Flores Carmen", "Asuncion Maria", "Asuncion Pepi", "Asuncion Inma", "Asuncion Maria", "Asuncion Pepi", "Asuncion Inma", "Delicias Amparo", "La Paz Cris", "La Paz Paco", "La Luz J. Manuel", "Chapas Virginia Toñi", "P Sur Toñi", "Molinillo Meli", "Union Ramona Gema", "Huetor Mª Luisa", "Salar Carmen", "Loja Maribel", "Loja Paqui", "Loja Paqui", "Loja Mª Jose", "Moraleda Paqui", "Loja Pepa Marengo", "V Trabuco Charo", "A. Miel Manolo", "A. Miel Conchi Tere", "Torremolinos Paqui", "Torremolinos Fina", "Churriana Eva", "Pima", "Viajante PACO", "Viajante ORTIGOSA"
Range("C12").Select
ActiveSheet.ScrollArea = "A1:O48"
ActiveSheet.Protect Password:="1"
End Select
End Sub
Un saludo
Es que no tenías que colocar mi código que solo fue de ejemplo para que observes en qué momento se inhabilitan los eventos !
Bien, retira esa línea y ahora analicemos tus 2 macros.
En el objeto ThisWorkbook, tenés una macro que se ejecuta 'cada vez' que selecciones alguna de esas hojas allí mencionadas. Creo que se puede mejorar pero no viene al caso ahora, solo comentame cuántas hojas tenés en total en tu libro.
Es decir, que cuando actives alguna de esas hojas, ya sea con alguna macro o seleccionandola desde su pestaña se asignará un rango de uso y se protegerá con la clave.
Ahora, tu 2da macro y una vez retirada la línea de cheque, solo copia y pega valores en la 'hoja activa'... no estás seleccionando ninguna hoja por lo que el evento anterior no se debiera ejecutar.
No es ahí donde necesitas inhabilitar los eventos... quizás tengas alguna otra que seleccione la hoja antes de copiar el dato de N9...
Mejor me envias todo tu código... solo necesito 1 o 2 hojas ... pero sí el editor con todas las macros que puedan estar seleccionando hojas... y de paso ver si esa macro no puede ser declarada de otro modo. Mi correo aparece en mi sitio.
Gracias por tu contestación.
Es que uso una macro que me selecciona unas 50 hojas, y es cuando una vez que están todas las hojas agrupadas, es cuando necesito la macro, que la necesitaría usar todos los meses,
Pero, para que me haga el trabajo bien y rápido tengo que borrar en ThisWorkbook:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Select Case Sh.Name
Case "Contado", "Adra Paco", "Balerma Trini", "El Ejido Adelina", "Berja Gador", "Adra Maria", "Iznajar Pepa", "Lucena Rafaela", "Lucena Carmen", "Benameji Juan", "Badolatosa Mª Jose", "Casariche Carmen", "Gilena Aurelia", "F. Piedra Antonia", "Humilladero Victoria", "Benameji Sole", "Galerias Fernandez", "Fuengirola Paco", "Fuengirola Charo", "Fuengirola Rosalia", "La Cala Antonia", "Marbella Juani", "Marbella Sara", "Flores Carmen", "Asuncion Maria", "Asuncion Pepi", "Asuncion Inma", "Asuncion Maria", "Asuncion Pepi", "Asuncion Inma", "Delicias Amparo", "La Paz Cris", "La Paz Paco", "La Luz J. Manuel", "Chapas Virginia Toñi", "P Sur Toñi", "Molinillo Meli", "Union Ramona Gema", "Huetor Mª Luisa", "Salar Carmen", "Loja Maribel", "Loja Paqui", "Loja Paqui", "Loja Mª Jose", "Moraleda Paqui", "Loja Pepa Marengo", "V Trabuco Charo", "A. Miel Manolo", "A. Miel Conchi Tere", "Torremolinos Paqui", "Torremolinos Fina", "Churriana Eva", "Pima", "Viajante PACO", "Viajante ORTIGOSA"
Range("C12").Select
ActiveSheet.ScrollArea = "A1:O48"
ActiveSheet.Protect Password:="1"
End Select
End Sub
Es codigo que quiero interrumpir en ThisWorkbook:
Son las mismas hojas que con la macro las agrupo.
Y despues ejecuto la macro que necesito que es:
Sub PEGAR_CON_VALORES()
Range("N9").Select
Selection.Copy
Range("M12,G43").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Sub
Un saludo Elsa
Muy bien, entonces si '..uso una macro que me selecciona unas 50 hojas..' es en esa macro que debes colocar la instrucción para inhabilitar el evento. Porque la otra solo copia y pega.
Así sería el orden (x favor NO utilices mi macro 'llamando' ... solo trato de mostrarte dónde se colocan las líneas EnableEvents)
Sub llamando() 'EJEMPLO PARA 2 HOJAS 'inhabilita evento de selección Application.EnableEvents = False Sheets(Array("Hoja1", "Hoja2")).Select Sheets("Hoja1").Activate 'llama a la macro para el pegado especial Call PEGAR_CON_VALORES 'al finalizar coloco nuevamente los eventos del modo normal 'Application.EnableEvens = True End Sub Sub PEGAR_CON_VALORES() ' Macro grabada el 07/02/2015 por Luis Range("N9").Select Selection.Copy Range("M12").Select Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ActiveWindow.SmallScroll Down:=9 Range("G43").Select Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False End Sub
La macro PEGAR te queda como la tenías originalmente.
Si tu macro de llamada es algo más compleja escribimela aquí o enviamela a mi correo.
Sdos!
Gracias Elsa por tu ayuda fabuloso.
Lo he solucionado así:
Sub llamando()
'inhabilita evento de selección
Application.EnableEvents = False
Call Agrupar_hojas_clientes
Sheets("El Ejido Adelina").Activate
'llama a la macro para el pegado especial
Call PEGAR_CON_VALORES
'al finalizar coloco nuevamente los eventos del modo normal
Application.EnableEvens = True
End Sub
Sub PEGAR_CON_VALORES()
' Macro grabada el 07/02/2015 por Luis
Range("N9").Select
Selection.Copy
Range("M12,G43").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Sub
Mejor imposible muchísimas gracias
- Compartir respuesta