Excel – 如何在不使用macros的情况下locking单元格

我有解决scheme实施使用macros,但我想如果我可以删除它。 所以这里的问题

我使用单元格上的validation规则实现了下拉菜单。 我希望该单元格是只读取决于在同一张纸上的第二个单元格中的值。

我试图locking使用另一个validation,但它不允许我。

任何想法?

我假设数据validation是在单元格A2 ,并且您正在检查的值在单元格A1

当您将单元格A1的值更改为“Blah Blah”时,代码将运行,然后locking单元格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 Validationinput新数据

编辑:使用列表中的公式

感谢Catering的评论主pipe,值得一提的是,您可以使用具有数据validation/列表的公式。

看到他的答案,以另一个线程看到这个行动: https : //stackoverflow.com/a/11902463/138938

原帖

演练Excel 2007:

  • function区>数据>数据validation
  • 授权:Personnalized(或类似的,我的Excel不是英文对不起)
  • 在该字段中input此公式:
    • =IF(A1="",FALSE,TRUE)

因此,如果A1仍为空,则不能在单元格中input值

得到它的工作,但你只能真正设置的价值,当它运作到一个下拉菜单

我使用名称pipe理器将名称test设置为值=IF(Sheet1!$A$1=1,"",Sheet1!$E$1:$E$5)

这意味着如果A1是1,我什么也得不到,如果A1是别的,我得到E1:E5

然后我将数据validation设置为List ,其中source为=test
您只能在testing返回列表时设置该值

当我这样做的时候,当A1是1时,我在我的validation下拉列表中得到一个空列表,我不能改变这个值。 如果A1不是1,我得到E1:E5的列表,我可以改变它的值

这是一个旧的post,但我发现了一个解决scheme,将抛出一个错误,并防止窥视进入任何他们想要的(使用Excel 2010),而不使用VBA。

在用户界面(SHEET1)上,我有以下字段:

  • 字段1是是/否validation下拉列表。
  • 字段2是百分比validation下拉列表,其值为1% – 100%。

我需要什么:

  • 当select“是”时,我可以在字段2中select或键入1%-100%。它也是“可用的”。

  • 当select“否”时,字段2变成“灰色”,用户不能再input一些随机值。

我是如何做到的:

  1. 对于字段2,我使用了条件格式(公式='SHEET2'!$ I $ 2 =“否”),并将其设置为灰色显示字体和背景。

  2. 在SHEET2中,我将字段(列I)设置为等于SHEET1中的字段1,因此根据SHEET1中的字段1中select的内容是“是”还是“否”。 然后,我简单地在其下面添加了99个其他行,将它们设置为等于紧靠其上方的单元格。 所以我有100行“是”或“否”。

  3. 在SHEET2中,我有另一列(R),第一个单元格的值为:= IF(I2 =“是”,0.01,1)

  4. 紧接着它,我有:= IF(I3 =“是”,R2 + 0.01,1)

  5. 然后,我预先填充下面的行中的值,直到我有1%到100%(当select“是”时),并将SHEET1的字段2上的validation设置为基于这些值。 这允许我手动input一个%值,或者从下拉值中select1%到100%。

结果:

当我select“否”时,会将字段2灰显,并保留之前的百分比,因为如果不使用VBA,则无法更改显示的值。 例如,它可能仍然显示30%。 但是,如果用户看到它变灰,并尝试键入一些值,如31%,它会引发错误,因为我在此字段的数据validation中的“错误警报”选项卡上设置错误。 如果他们select下拉菜单,他们只会看到100个100%的选项。 这是唯一的缺点,但是我想我可以把所有东西都删掉,除了一个显示100%的单个字段。

当我select“是”时,它不显示字段2,我可以自由select1-100之间的多项列表值。

我需要做什么的价值观:

无论我需要做什么,如果select了“否”,我会设置一些基于100%的公式,如果select了“是”,则会设置字段2的百分比。