Agregar una fórmula a macro que bloquea celdas según valor

Tengo la siguiente macro que me bloquea o desbloquea unas celdas, dependiendo si el valor de la columna E es 0 o mayor a cero:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim matri As Range
    Set matri = Application.Intersect(Target, Range("E5:E300"))
    If Not matri Is Nothing Then
        If matri = 0 Then
            ActiveSheet.Unprotect
            matri.Offset(0, 1).Locked = False
            matri.Offset(0, 2).Locked = False
            ActiveSheet.Protect
        ElseIf matri > 0 Then
            ActiveSheet.Unprotect
            matri.Offset(0, 1).Locked = True
            matri.Offset(0, 2).Locked = True
            ActiveSheet.Protect
        End If
    End If
End Sub

Ahora, cuando el valor es mayor a cero, necesitaría que ademas de proteger la celda, antes escriba una formula de buscarv:

Yo intente algo así, pero no funciona:

ElseIf matri > 0 Then
            ActiveSheet.Unprotect
            matri.Offset(0, 1).value = "=SI([@[Nº Matricula]]="";"";SI.ERROR(BUSCARV([@[Nº Matricula]];matriculados;3;0);""))"
            matri.Offset(0, 2).value = "=SI([@[Nº Matricula]]="";"";SI.ERROR(BUSCARV([@[Nº Matricula]];matriculados;6;0);""))"
            matri.Offset(0, 1).Locked = True
            matri.Offset(0, 2).Locked = True
            ActiveSheet.Protect
        End If
    End If
End Sub

Me imagino que debe ser sencillo, pero no tengo idea de como se puede hacer.

1 Respuesta

Respuesta
1

[Hola

Las fórmulas se insertan usando otras propiedades, no Value. Mira por aquí:

https://abrahamexcel.blogspot.com/2018/11/insertar-formulas-con-macros.html

Al usar tablas, no te preocupes, es lo mismo pero sin usar las referencias RC que menciono en el artículo.

Abraham Valencia

Ya lo había intentado con .fórmula y ahora lo intente con las otras 3 opciones que me das y con la fórmula en ingles:

"=IF([@[Nº Matricula]]="","", IFERROR(VlookUp([@[Nº Matricula]], matriculados, 3,0),""))"

Sigo sin poder lograrlo, para mi tiene algo que ver con que no uso "Range" sino "offset"

No mencionas que error te da, no colocas con exactitud cómo lo has intentado, no podemos ver tus datos para segurar que están bien los campos tal cual los estás utilizando, etc. Te aseguro que no tiene que ver con el OffSet.

Quizá sea más fácil ayudarte viendo el archivo, colócalo en algún Drive y comparte por aquí el enlace. Si consideras que son datos privados, solo cámbialos pero mantén la estructura y tipo de datos.

Abraham Valencia

[Hola

Intenta así:

matri.Offset(0, 1).Formula = "=IF([@[Nº Matricula]]="""","""",IFERROR(VLOOKUP([@[Nº Matricula]],matriculados,3,0),""""))"

Faltaban comillas. Comentas

Abraham Valencia

Mira la pavada que era.. claro tomaba como final de la fórmula la primer comilla.

¡Gracias! Y saludos! Muy atento como siempre.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas