Dividir procedimiento demasiado largo

No se si la otra pregunta se envío correctamente, te pido por favor si me puedes escribir como dividir este procedimiento en dos o más partes, porque el original excede los 64 KB y no he podido hacerlo usando el Call, supongamos el nombre para llamar al otro procedimimiento como segunda_parte
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$D$7") Then
If Target.Value = 9.5 Then
Range("$B$7") = "Movilidad"
Else
Range("B7") = ""
End If
End If
If Target.Address = ("$G$7") Then
If Target.Value = 9.5 Then
Range("$E$7") = "Movilidad"
Else
Range("E7") = ""
End If
End If

1 respuesta

Respuesta
1
No entiendo la pregunta de dividir el código.
Esto es un evento que se ejecuta cada vez que en la hoja se cambia el valor de las celdas.
Este evento no puede ser invocado con Call.
Chequea y me avisas.
A ver si logro explicarme, la hoja esta armada para una persona por fila, y las columnas desde el día 1 al 31 (en total 100 personas)
Como ves arriba el procedimiento refiere el IF a la celda D7 y G7 (q serian dos días de la persona q esta ubicada en la fila 7), es solo un ejemplo de lo q es todo el código, ya q son más de 1000 las celdas q debo ingresar en el código de la hoja de calculo. Pero cuando llego a una determinada cantidad de celdas me dice q el procedimiento es demasiado largo. La pregunta es ¿Puede ser q el código sea para las celdas q me permita no exceder de 64 KB y luego insertar un segundo código donde pueda agregar las celdas q faltan? Así podría incluir una a una, todas las celdas q deseo incluya en la rutina.
O sea un primer código donde pueda preguntar por las celdas B3 a la CP16, un segundo q sea de la B17 a la CP32, y así ir insertando códigos hasta cubrir el rango 101 q seria la ultima fila donde tengo datos.
Prueba el siguiente código, te servirá para cualquier fila que se modifique y el código se vera reducido.
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Left(Target.Address, 3)
Case "$D$"
If Target.Value = 9.5 Then
Range("$B$" & Target.Row).Value = "Movilidad"
Else
Range("$B$" & Target.Row).Value = ""
End If
Case "$G$"
If Target.Value = 9.5 Then
Range("$E$" & Target.Row).Value = "Movilidad"
Else
Range("$E$" & Target.Row).Value = ""
End If
End Select
End Sub
excelente, ahi queda perfecto, lo unico q habria q ver si se puede solucionar es q cuando selecciono para borrar varias celdas de la misma columna y borro todas juntas me da "error '13' en tiempo de ejecucion" y me pide corregir esta linea
 If Target.Value = "9,5" Then
Si no se puede no hay problema, las puedo borrar de a una
Gracias
Se pueden omitir los errores Colocando UN On error hacia una etiqueta al final del procedimiento,
Private Sub Worksheet_Change(ByVal Target As Range)
On error Goto Fin
Select Case Left(Target.Address, 3)
Case "$D$"
If Target.Value = 9.5 Then
Range("$B$" & Target.Row).Value = "Movilidad"
Else
Range("$B$" & Target.Row).Value = ""
End If
Case "$G$"
If Target.Value = 9.5 Then
Range("$E$" & Target.Row).Value = "Movilidad"
Else
Range("$E$" & Target.Row).Value = ""
End If
End Select
Fin:
End Sub
¿Solo así? Porque lo puse tal cual y me da "error de compilación, no se ha definido la etiqueta"
Te falta colocar la etiqueta Fin:, coloca al final del procedimiento antes del end sub, tal como te lo envíe.
listo, ya no te molesto, le puse On error resume next.
Millones de gracias, el código que me enviaste es exacto lo que necesitaba y me soluciona horas de trabajo controlando
Saludos,

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas