Итак, основываясь на исследовании, это может быть невозможно без использования кода 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
Это должно помочь вам начать.