我已经使用宏实现了解决方案,但如果可以的话,我想删除它。所以这里的问题
我在单元格上使用验证规则实现了下拉菜单。我希望该单元格是只读的,具体取决于同一张表上第二个单元格中的值。
我尝试使用另一个验证来锁定它,但它不允许我。
任何想法?
我已经使用宏实现了解决方案,但如果可以的话,我想删除它。所以这里的问题
我在单元格上使用验证规则实现了下拉菜单。我希望该单元格是只读的,具体取决于同一张表上第二个单元格中的值。
我尝试使用另一个验证来锁定它,但它不允许我。
任何想法?
我假设数据验证在单元格A2
中,您正在检查的值在单元格中A1
当您将 cell 的值更改A1
为 "Blah Blah" 时,代码将运行然后锁定 cell A2
。在实际运行之前,请花点时间阅读代码中的注释。
代码必须粘贴在工作表代码区域中。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
Dim mypassword As String, StringToCheck As String
On Error GoTo Whoa
'~~> Change the password here to protect/unprotect the sheet
mypassword = "password"
'~~> Change it to the relevant string with which you want to compare
StringToCheck = "Blah Blah"
If Not Intersect(Target, Range("A1")) Is Nothing Then
'~~> Check for the cell value
If Target.Value = StringToCheck Then
'~~> Un-Protect the sheet
ActiveSheet.Unprotect mypassword
'~~> Lock the cell
Range("A2").Locked = True
'~~> Re-Protect the sheet
ActiveSheet.Protect mypassword
End If
End If
LetsContinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
您可以阻止用户仅使用Data Validation
编辑:在列表中使用公式
感谢餐饮主管的评论,值得记住的是,您可以将公式与数据验证/列表一起使用。
请参阅他对另一个线程的回答以查看此操作:https ://stackoverflow.com/a/11902463/138938
原帖
Excel 2007 演练:
=IF(A1="",FALSE,TRUE)
因此,如果 A1 仍为空,则无法在单元格中输入值
让它工作,但你只能在它工作到下拉列表时实际设置值
我使用名称管理器将名称设置test
为值=IF(Sheet1!$A$1=1,"",Sheet1!$E$1:$E$5)
这意味着如果A1
是 1,我什么也得不到,如果A1
是其他,我得到 E1:E5
然后我将数据验证设置为List
,源为=test
您只能在测试返回列表时设置值
当我这样做时,当 A1 为 1 时,我在验证下拉列表中得到一个空列表,并且我无法更改该值。如果 A1 不是 1,我会得到 E1:E5 的列表,我可以更改值
这是一篇旧帖子,但我找到了一个解决方案,该解决方案会引发错误并防止窥视者在不使用 VBA 的情况下输入他们想要的任何内容(使用 Excel 2010)。
在用户界面 (SHEET1) 上,我有以下字段:
我需要什么:
When "Yes" is selected, I can choose or type 1%-100% in field 2. It is also "available".
When "No" is selected, field 2 becomes "grayed out" and user can no longer enter some random value.
我是怎么做到的:
对于字段 2,我使用了条件格式(='SHEET2'!$I$2="No" 的公式)并将其设置为灰色字体和背景。
在 SHEET2 中,我将一个字段(第 I 列)设置为等于 SHEET1 中的字段 1,因此它是“是”或“否”,具体取决于在 SHEET1 的字段 1 中选择的内容。然后我简单地在它下面添加了 99 行,将它们设置为等于它正上方的单元格。所以我有 100 行“是”或“否”。
在 SHEET2 中,我有另一列 (R),第一个单元格值为: =IF(I2="Yes", 0.01, 1)
在它下面,我有: =IF(I3="Yes", R2+0.01, 1)
然后,我将值下方的值预填写,直到我拥有1%的100%(选择“是”),并将验证设置在Sheet1字段2上以基于这些值。这允许我手动输入 % 值,或从下拉值中选择 1% 到 100%。
结果:
当我选择“否”时,它会使字段 2 变灰,并保留 % 之前的值,因为没有 VBA 就无法更改显示的值。例如,它可能仍显示 30%。但是,如果用户看到它变灰并尝试在其中输入一些值,例如 31%,它会抛出一个错误,因为我在该字段的数据验证中的“错误警报”选项卡上设置了一个错误。如果他们选择下拉菜单,他们只会看到 100 个 100% 的选项。这是唯一的缺点,但我想我可以将所有内容都删除,除了 1 个显示 100% 的单个字段。
当我选择“是”时,它会使字段 2 变为灰色,我可以再次从 1-100 之间的 doprdown 列表值中自由选择。
我需要对这些值做些什么:
对于我需要完成的任何事情,如果选择“否”,我会根据 100% 设置我正在使用的公式,如果选择“是”,则设置字段 2 的百分比。