Macro que se ejecuta al cambio de una celda

Voy a intentar explicar mi problema:

Gracias al foro logre crear una macro que se ejecuta al cambiar una celda con un valor especifico, esas me funciono de maravilla, luego necesite uan que se ejecute cuando otra celda sufra cualquier tipo de cambio, encontré una solución aca mismo, les copio lo que he creado en este caso:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Target.Address = "$E$5" And Target.Value = "DR" Then

MsgBox "Esta asignando un turno de trabajo en Descanso Remunerado"

DESC_REM

End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Target.Address(False, False) = "$D$5" Then

MsgBox "Fue asignado el inicio de un turno de trabajo en Descanso Remunerado"

DR_End

End If

End Sub

Pero no me funciona la segunda : me arroja el siguiente error:

Error de compilación:

Se ha detectado un nombre ambiguo: Worksheet:Change

Recordemos que el error es con la segunda, intente cambiar el nombre agregando un 1 pero no me funciono. :(

1 Respuesta

Respuesta
2

El error es el siguiente: Solo puede haber un evento worksheet_change

Es decir, toda tu macro tiene que estar en un único evento

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$E$5" And Target.Value = "DR" Then
MsgBox "Esta asignando un turno de trabajo en Descanso Remunerado"
DESC_REM

End If
If Target.Address(False, False) = "$D$5" Then
MsgBox "Fue asignado el inicio de un turno de trabajo en Descanso Remunerado"
DR_End
End If
End Sub

Luis muchas gracias, funciono excelente,

Ahora tengo este otro problema:

Cree las siguientes macros, son sencillas, tan solo ocultan o muestran unas columnas, las cuales las ejecuto a través de un botos de formulario:

Sub DR() ' ' DR Macro '
' Columns("E:E").EntireColumn.AutoFit

Range("E8").Select

End Sub

Sub Ser_Var() ' ' Ser_Var Macro '
' Columns("D:D").EntireColumn.AutoFit

Range("D8").Select

End Sub

Sub DR_End() ' ' DR_End Macro '
' Columns("E:E").Select

Selection.EntireColumn.Hidden = True

Range("G8").Select

End Sub

Sub Ser_Var_End() ' ' Ser_Var_End Macro '
' Columns("D:D").Select

Selection.EntireColumn.Hidden = True

Range("G8").Select

End Sub

Luego las pruebo y funcionan de maravilla, pero como necesito dejar hoja bloqueada, utilizo la pestaña de Revisar y dejo habilitado las opciones de Seleccionar celdas desbloqueadas. La bloqueo con contraseña y cuando voy a ejecutar las macros anteriores me arroja el siguiente error:

Se ha producido el error "1004" en tiempo de ejecución:

Erro en el método AutoFit de la clase Range.

Ojala me puedan ayudar, la verdad aprendo mucho gracias ustedes.

Con la hoja protegida tienes que desproteger y proteger mediante macro. Tus macros correctas son estas, en negrita he puesto las lineas nuevas y, la palabra contraseña la puedes sustituir por tu contraseña.

Sub ajusta_columna_e()
ActiveSheet.Unprotect Password:="contraseña"
Columns("E:E").EntireColumn.AutoFit
Range("E8").Select
ActiveSheet.Protect Password:="contraseña"
End Sub

Sub ajusta_columna_d()
ActiveSheet.Unprotect Password:="contraseña"
Columns("D:D").EntireColumn.AutoFit
Range("D8").Select
ActiveSheet.Protect Password:="contraseña"
End Sub

Sub oculta_columna_e()
ActiveSheet.Unprotect Password:="contraseña"
Columns("E:E").Select
Selection.EntireColumn.Hidden = True
Range("G8").Select
ActiveSheet.Protect Password:="contraseña"
End Sub

Sub oculta_columna_d()
ActiveSheet.Unprotect Password:="contraseña"
Columns("D:D").Select
Selection.EntireColumn.Hidden = True
Range("G8").Select
ActiveSheet.Protect Password:="contraseña"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas