1

我已经使用宏实现了解决方案,但如果可以的话,我想删除它。所以这里的问题

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

我尝试使用另一个验证来锁定它,但它不允许我。

任何想法?

4

4 回答 4

6

我假设数据验证在单元格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
于 2012-08-14T13:41:44.153 回答
6

您可以阻止用户仅使用Data Validation

编辑:在列表中使用公式

感谢餐饮主管的评论,值得记住的是,您可以将公式与数据验证/列表一起使用。

请参阅他对另一个线程的回答以查看此操作:https ://stackoverflow.com/a/11902463/138938

原帖

Excel 2007 演练:

  • 功能区 > 数据 > 数据验证
  • 授权:个性化(或类似,我的 Excel 不是英文对不起)
  • 在字段中输入此公式:
    • =IF(A1="",FALSE,TRUE)

因此,如果 A1 仍为空,则无法在单元格中输入值

于 2012-08-14T14:06:54.930 回答
2

让它工作,但你只能在它工作到下拉列表时实际设置值

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

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

然后我将数据验证设置为List,源为=test
您只能在测试返回列表时设置值

当我这样做时,当 A1 为 1 时,我在验证下拉列表中得到一个空列表,并且我无法更改该值。如果 A1 不是 1,我会得到 E1:E5 的列表,我可以更改值

于 2012-08-14T20:12:03.373 回答
0

这是一篇旧帖子,但我找到了一个解决方案,该解决方案会引发错误并防止窥视者在不使用 VBA 的情况下输入他们想要的任何内容(使用 Excel 2010)。

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

  • 字段 1 是一个是/否验证下拉列表。
  • 字段 2 是百分比验证下拉列表,其值为 1% - 100%。

我需要什么:

  • 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.

我是怎么做到的:

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

  2. 在 SHEET2 中,我将一个字段(第 I 列)设置为等于 SHEET1 中的字段 1,因此它是“是”或“否”,具体取决于在 SHEET1 的字段 1 中选择的内容。然后我简单地在它下面添加了 99 行,将它们设置为等于它正上方的单元格。所以我有 100 行“是”或“否”。

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

  4. 在它下面,我有: =IF(I3="Yes", R2+0.01, 1)

  5. 然后,我将值下方的值预填写,直到我拥有1%的100%(选择“是”),并将验证设置在Sheet1字段2上以基于这些值。这允许我手动输入 % 值,或从下拉值中选择 1% 到 100%。

结果:

当我选择“否”时,它会使字段 2 变灰,并保留 % 之前的值,因为没有 VBA 就无法更改显示的值。例如,它可能仍显示 30%。但是,如果用户看到它变灰并尝试在其中输入一些值,例如 31%,它会抛出一个错误,因为我在该字段的数据验证中的“错误警报”选项卡上设置了一个错误。如果他们选择下拉菜单,他们只会看到 100 个 100% 的选项。这是唯一的缺点,但我想我可以将所有内容都删除,除了 1 个显示 100% 的单个字段。

当我选择“是”时,它会使字段 2 变为灰色,我可以再次从 1-100 之间的 doprdown 列表值中自由选择。

我需要对这些值做些什么:

对于我需要完成的任何事情,如果选择“否”,我会根据 100% 设置我正在使用的公式,如果选择“是”,则设置字段 2 的百分比。

于 2017-04-29T07:58:10.977 回答