因此,根据研究,如果不使用 VBA 代码,这可能是不可能的,但尽管如此,我觉得还是值得一问。我希望仅当且仅当相邻单元格为特定值时,才允许用户在单元格中输入数据。
例如,A1 中有一个下拉列表,其中包含以下值;,,,Staff
。如果用户在中选择,,Student
Manager
Board
Staff
Student
Manager
A1,那么B1使用自动生成的自定义函数 IF
公式,但如果 A1 中选择的值为Board
,则用户可以在B1。
由于自定义验证必须返回真的或者错误的没有可以输入到公式选项卡中的公式自定义数据验证窗户。
那么有没有一种解决方法,可以在单元格中输入公式,然后如果选择A1是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
这应该可以帮助你开始了。