Объединение Excel UDF и условной пользовательской проверки данных при вводе данных

Объединение Excel UDF и условной пользовательской проверки данных при вводе данных

Итак, основываясь на исследовании, это может быть невозможно без использования кода VBA, но, тем не менее, я чувствую, что стоит спросить. Я хочу разрешить пользователю вводить данные в ячейку только в том случае, если предшествующая смежная ячейка является определенным значением.

Например, в ячейке A1 есть раскрывающийся список со следующими значениями: Staff, Student, Manager, Board. Если пользователь выбирает Staff, Student, ManagerвА1, то значение вВ1автоматически генерируется с использованиемУДФ IFФормула, но если в ячейке A1 выбрано значение Board, то пользователь может ввести конкретное числовое значение вВ1.

Так как пользовательская проверка должна возвращатьистинныйилиЛОЖЬне существует формулы, которую можно ввести на вкладку формулпроверка данных на заказокно.

Так есть ли обходной путь, когда формулу можно ввести в ячейку, и тогда формула не будет существовать, если выбор вА1является Board.

Надеюсь, это достаточно понятно.

Если нет, может ли кто-нибудь помочь с какой-нибудь конструкцией кода, которая позволит мне преодолеть эту проблему? Поскольку мои знания VBA все еще очень любительские.

Поэтому, исходя из моих знаний, я полагаю, что код в такой конструкции будет применим;

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

Если возможно, я бы не хотел прибегать к использованиюInputBox

Благодарю за ваш ответ.

решение1

Если я ничего не упускаю, UDF написана на VBA, так что в вашей рабочей книге уже есть некоторый код.

Кроме того, я предполагаю, что ваша рабочая книга заблокирована, чтобы пользователи не могли вводить данные в ячейки, в которые им это делать не положено.

Основываясь на этих предположениях и немного очистив свой псевдокод, измените существующую UDF, добавив несколько дополнительных строк кода:

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

Это должно помочь вам начать.

Связанный контент