2012-08-14 187 views
1

我有使用宏实现的解决方案,但是如果可以,我想将其删除。所以这里的问题Excel - 如何尽可能不使用宏来锁定单元格

我有一个单元格使用验证规则实施下拉列表。我希望该单元格是只读的,具体取决于同一工作表中第二个单元格中的值。

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

任何想法?

+0

你怎么样试图阻止用户进入价值?它应该使用公式 – JMax

+0

更详细的这个问题,将真正帮助 – whytheq

回答

6

我假设数据验证是细胞A2和正在检查的值是在细胞A1

当您更改单元格A1的价值“等等等等”的代码将运行,然后锁定单元格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 
+0

感谢快速回复,但我想我已经在使用宏(VBA)我想删除,以与工作的.xlsx和平板电脑 – user1598124

+0

工作,这样你就不会解决方案想要一个VBA解决方案。你在说什么? –

+0

是的,这是正确的 – user1598124

5

您可以防止只使用Data Validation

编辑输入新数据的用户:使用公式列表

由于Head of Catering的评论,这是值得记住的是,你可以用公式与数据验证/列表。

见他的回答另一个线程来看到这个动作:https://stackoverflow.com/a/11902463/138938

原帖

演练对于Excel 2007:

  • 丝带>数据>数据验证
  • 授权:人格化(或类似,我的Excel不是英文对不起)
  • 在字段中输入以下公式:
    • =IF(A1="",FALSE,TRUE)

因此,如果A1仍是空的

+0

我已经验证规则在单元格上创建下拉列表。它不允许我第二验证添加到同一个小区 – user1598124

+1

@ user1598124:您可以使用和'或'和你的验证规则公式中'和'声明,以满足您的2个验证要求? –

+0

@ user1598124:我不知道添加第二个验证的任何标准方式,但没有找到没有数据验证的下拉解决方案。最后,我看不到VBA – JMax

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的列表,并且我可以更改值

+0

+1有趣的方法,但我测试了它,它肯定不会锁定单元格:当A1为1时,您不会获得下拉菜单,但实际上可以输入任何值,并且验证不会抱怨。 –

+1

这与餐饮解决方案的主管部门相似(请参阅他对我的回答的评论),但他的解决方案更直接并且可能有效。不错的建议 – JMax

0

这是一个旧帖子,但我找到了一个解决方案,它会抛出一个错误,并防止窥视进入任何他们想要的使用Excel 2010)而不使用VBA。

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

  • 字段1是是/否验证下拉列表。
  • 字段2是一个百分数验证下拉列表以1%的值 - 100%。

我需要什么样的:

  • 当 “是” 时,我可以选择或场2 1类型%-100%,这也是 “可用”。

  • 当“否”时,字段2变为“变灰”和用户不再能够输入一些随机值。

我怎么做的:

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

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

  3. 在SHEET2,我有另一列(R)与所述第一小区值:= IF(I2 = “是”,0.01,1)

  4. 紧下方,我有:= IF( I3 =“是”,R2 + 0.01,1)

  5. 然后我预先填写下面的行中的值,直到我有100%的1%(当选择“是”时)并在SHEET1的字段上设置验证2基于这些值。这允许我手动输入%值,或者从下拉值1%到100%中进行选择。

结果:

当我选择“否”,它呈灰色场2,并留下什么,因为它不能没有VBA改变显示的数值是前%。例如,它可能仍显示30%。但是,如果用户看到它变灰并尝试在里面输入一些值,比如31%,它会因为我的数据验证了这一领域的“错误警报”选项卡上的设置错误抛出异常。如果他们选择下拉菜单,他们只会看到100个100%的选项。这是唯一的缺点,但我想我可以将所有内容都删除,除了1个显示100%的单个字段。

当我选择“是”,它ungrays场2,我可以自由地从1-100之间的doprdown列表值再次选择。

我需要什么样的价值观做:

不管它是我需要完成,我设置了一些公式,我以100%使用,如果“否”被选中,场2的%如果选择“是”。

相关问题