Combinación de UDF de Excel y validación de datos personalizados condicionales en la entrada de datos

Combinación de UDF de Excel y validación de datos personalizados condicionales en la entrada de datos

Entonces, según la investigación, esto podría no ser posible sin el uso del código VBA, pero de todos modos creo que vale la pena preguntar. Quiero permitir que un usuario solo ingrese datos en una celda si y solo si el adyacente anterior es un valor específico.

Por ejemplo, tiene una lista desplegable en A1 con los siguientes valores; Staff, Student, Manager, Board. Si el usuario selecciona Staff, Student, ManagerenA1, entonces el valor enB1se genera automáticamente usando unUDF IFFórmula, pero si el valor seleccionado en A1 es Board, entonces el usuario puede ingresar un valor numérico específico enB1.

Dado que la validación personalizada debe regresarVERDADEROoFALSOno existe ninguna fórmula que se pueda ingresar en la pestaña de fórmulas delvalidación de datos personalizadaventana.

Entonces, ¿existe una solución alternativa donde se puede ingresar la fórmula en la celda y luego la fórmula no existirá si la opción enA1es Board.

Espero que esto sea bastante comprensible.

Si no es así, ¿alguien puede ayudarme con alguna construcción de código que me permita superar este problema? Como mi conocimiento de VBA es todavía muy amateur.

Entonces, según mi conocimiento, creo que se aplicaría un código en este tipo de construcción;

If Select Case Range(A1).Value = "Staff" Then B1 = Application.WorksheetFunction. (Since a Match function is employed) ElseIf Select Case Range(A1).Value = "Student" Then B1 = Application.WorksheetFunction. ElseIf Select Case Range(A1).Value = "Manager" Then B1 = Application.WorksheetFunction. ElseIf Select Case Range(A1).Value = "Board" Then (My knowledge fails me here) Else B1 ="" End If

Si es posible, realmente no quiero emplear el uso deInputBox

Gracias por su respuesta.

Respuesta1

A menos que me falte algo, la UDF está escrita en VBA, por lo que ya tienes algo de código en tu libro de trabajo.

Además, supongo que su libro de trabajo está bloqueado para evitar que las personas ingresen datos en celdas que no deben ingresar.

Con base en esas suposiciones, y limpiando un poco su pseudocódigo, modifique su UDF existente con algunas líneas de código adicionales:

Dim refCell as Range
refCell = ThisWorkbook.Worksheets(mySheet).Range("A1")
Dim targetCell as Range
targetCell = ThisWorkbook.Worksheets(mySheet).Range("B1")
With refCell
  If .Value = "Staff" or .Value = "Manager" or .Value = "Board" then
    targetCell.Locked = True
    'Call your existing UDF code here to generate the value
  Else
    targetCell.Locked = False
  End If
End With

Eso debería ayudarte a empezar.

información relacionada