Macro para eliminar celdas y/o columnas especificas no ejecuta.

Pido su apoyo para dar solución al inconveniente que tengo, tengo un botón de para ejecutar un macro anillada, este botón no esta en la hoja donde se procesa cada macro:

Sub DDJJ_Nuevo()
Call LIMPIAR_VENTAS
Call LIMPIAR_COMPRAS
Call LIMPIAR_LIQ
Call LIMPIAR_PROVEEDORES
FRM_LISTO.Show
End Sub

cada una de estas macro es de diferentes hojas:

la macros esta compuesta por los siguientes codigo:

HOJA 7

Sub LIMPIAR_VENTAS()
If ActiveSheet.Index = 3 Then
CUO = Hoja7.Range("AP1")
Hoja7.Range("B9:C" & CUO).Value = ""
Hoja7.Range("E9:I" & CUO).Value = ""
Hoja7.Range("K9:K" & CUO).Value = ""
Hoja7.Range("M9:N" & CUO).Value = ""
Hoja7.Range("P9:P" & CUO).Value = ""
Hoja7.Range("R9:R" & CUO).Value = ""
Hoja7.Range("T9:AA" & CUO).Value = ""
Hoja7.Range("AC9:AC" & CUO).Value = ""
Hoja7.Range("AE9:AG" & CUO).Value = ""
Hoja7.Range("AJ9:AR" & CUO).Value = ""
Hoja7.Range("AT9:AZ" & CUO).Value = ""
Hoja7.Range("BF9:BF" & CUO).Value = ""
End If
End Sub

HOJA 8

Sub LIMPIAR_COMPRAS()
If ActiveSheet.Index = 5 Then
CUO = Hoja8.Range("Ar1")
Hoja8.Range("B9:C" & CUO).Value = ""
Hoja8.Range("E9:I" & CUO).Value = ""
Hoja8.Range("K9:O" & CUO).Value = ""
Hoja8.Range("S9:AA" & CUO).Value = ""
Hoja8.Range("AC9:AC" & CUO).Value = ""
Hoja8.Range("AE9:AG" & CUO).Value = ""
Hoja8.Range("AI9:AR" & CUO).Value = ""
Hoja8.Range("AT9:AZ" & CUO).Value = ""
Hoja8.Range("BC9:BC" & CUO).Value = ""
Hoja8.Range("BF9:BF" & CUO).Value = ""
Hoja8.Range("BJ9:BJ" & CUO).Value = ""
Hoja8.Range("BQ9:BQ" & CUO).Value = ""
End If
End Sub

HOJA 9

Sub LIMPIAR_LIQ()
If ActiveSheet.Index = 5 Then
Hoja9.Range("C51:C51").Value = ""
Hoja9.Range("B57:H59").Value = ""
Hoja9.Range("B61:H63").Value = ""
Hoja9.Range("D54:D54").Value = ""
Hoja9.Range("E54:E54").Value = ""
Hoja9.Range("F17:F17").Value = ""
Hoja9.Range("F21:F21").Value = ""
Hoja9.Range("F26:F26").Value = ""
Hoja9.Range("I17:M28").Value = ""
End If
End Sub

HOJA 13

Sub LIMPIAR_PROVEEDORES()
If ActiveSheet.Index = 6 Then
CUO = Hoja13.Range("J1")
Hoja13.Range("A3:A" & CUO).Value = ""
Hoja13.Range("C3:F" & CUO).Value = ""
End If
End Sub

De esta forma al ejecutar el botón me ejecuta todos estos codigo, quisiera su apoyo de ustedes para poder ejecutarlo sin ningún inconvenientes.

Respuesta
1

¿Qué error te marca?
¿Dónde tienes tus macros, en cada hoja o un modulo?

Buenas tardes Daniel:

Se encuentra en modulo diferentes, pero al ejecutar Sub DDJJ_Nuevo() no realiza ningún proceso, pero si realizo individualmente colocandome en la hoja que corresponde si ejecuta, creo que es por el If ActiveSheet.Index = 5 Then por que cada macro es diferente.

Espero me puedas ayudar, o a modificar la forma de eliminar datos por rango de columnas dependiente de una variable la ultima celda.

Saludos,

Pues si, no se ejecutan por que al estar activa una hoja al hacer la comparación de ActiveSheet. Index se anula la macro.
Quitale todas las comparaciones de If y End If y ya debería poder funcionar.

Hola Daniel:

Ahora dentro de este proceso tengo una macro adicional:

Sub Consecutivos()
UltLinea = Range("A" & Rows.Count).End(xlUp).Row 'captura el número de la ultima fila con datos
UltCelda = "E" & UltLinea 'muestra el número de la ultima fila con su letra de columna

Range("E9").Select
ActiveCell.FormulaR1C1 = "1"
Range("E10").Select
ActiveCell.FormulaR1C1 = "=+R[-1]C+1"
Range("E10").Select
Selection.AutoFill Destination:=Range("E10", UltCelda), Type:=xlFillDefault
Range("E10", UltCelda).Select
Range("E9").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("E9").Select
Application.CutCopyMode = False

End Sub

Esta debe procesar en la Hoja 8, pero como el botón lo tengo en la hoja 19 procesa aqui, que puedo hacer para indicar a esta macro que procese en la hoja 8 y no en la hoja 19 donde inició el proceso.
Agradezco de antemano su apoyo.

Saludos

Para más fácil solo puedes seleccionarla

Sub Consecutivos()
Sheets("Hoja8").Select 'aqui se selecciona la hoja
UltLinea = Range("A" & Rows.Count).End(xlUp).Row 'captura el número de la ultima fila con datos
UltCelda = "E" & UltLinea 'muestra el número de la ultima fila con su letra de columna
Range("E9").Select
ActiveCell.FormulaR1C1 = "1"
Range("E10").Select
ActiveCell.FormulaR1C1 = "=+R[-1]C+1"
Range("E10").Select
Selection.AutoFill Destination:=Range("E10", UltCelda), Type:=xlFillDefault
Range("E10", UltCelda).Select
Range("E9").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("E9").Select
Application.CutCopyMode = False
End Sub

Hola Daniel:

Entonces me indicas que solo coloque esto Sheets("Hoja8").Select al inicio de la formula para que no se ejecute en hoja donde me encuentro.

Gracias.

Así es, hay muchas formas pero hacerlo de otro modo es meterle mano a todo tu código. Avisa si queda.

Hola Daniel:

Si esta fórmula se repite en otras macros pero que se ejecuta en diversas hojas.

Algo así:

Macro1: Ejecuta en la hoja7

Sub prueba1()

call consecutivos

end sub

Macro2: Ejecuta en la hoja8

Sub prueba2()

call consecutivos

end sub

Macro3: Ejecuta en la hoja9

Sub prueba3()

call consecutivos

end sub

La siguiente variable Sheets("Hoja8").Select le colocaria al inicio de cada prueba o tengo que indicar en cada SUB CONSECUTIVOS(), entonces tendría varias consecutivos para cada prueba.

Espero me pueda comprender la consulta.

Saludos.

Por un ejemplo tendrías que editar y quitar todos los

Hoja13.Range("A3:A" & CUO).Value = ""

por

Range("A3:A" & CUO).Value = ""

pues al poner Hoja13 le estas indicando que haga esa actividad en la hoja 13 y no en la hoja activa
Si quitas todos y pones la instrucción Sheets("Hoja8").Select antes de empezar con los call al ser la hoja activa la hoja 8 no es necesario que le indiques a todas las demás pues la hoja 8 se selecciona desde el principio.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas