好的,我有两组代码,第二组代码隐藏和取消隐藏基于另一个选择的单元格完美无缺。我还需要保护整个表单,只有在另一个单元中有数据时才会保护单元格(这仍然是未锁定的。)
然而,要解锁的代码似乎没有解锁任何单元格 - 所以实际上它并没有做我需要它。我是这里的相对新手,从这些论坛和其他网站获取我的代码和想法,并随着时间的推移修改它们以满足我自己的需要。
通过此处填补空白,如果可能,需要一些帮助。
这是我的代码 - 第一部分是不解锁我输入的单元格范围的位。
Private Sub Worksheet_Change(ByVal Target As Range)
' section one unlocks the range of cells A6:D115 when D5 changes from empty to not empty, and then allows a user to enter data into the range of cells in not empty case condition below
If Target.Address(False, False) = "D5" Then
Select Case Target.Value
Case Is = "": Range("A6:D115").Locked = True
Case Is <> "": Range("C6:D6,A16:D16,C19:D22,D25:D25,D41:D57,B58:D58,C63:D63,C65:D73,C75:D78,C80:D84,D88:D88,A93:D98,D101:D103,B113:B114,D113:D113").Locked = False
End Select
End If
' section two hides and unhides a series of cells based on the D25 selection
If Target.Address(False, False) = "D25" Then
Select Case Target.Value
Case "Select as appropriate": Range("40:85").EntireRow.Hidden = False
Case "USA - Breen Road": Range("40:85").EntireRow.Hidden = False
Range("45:45,47:47,53:57,77:78").EntireRow.Hidden = True
Case "USA - Conroe": Range("40:85").EntireRow.Hidden = False
Range("40:52,77:78,80:80,85:85").EntireRow.Hidden = True
Case "USA - Lafayette": Range("40:85").EntireRow.Hidden = False
Range("43:43,45:47,49:49,53:57,61:83").EntireRow.Hidden = True
Case "Europe - Aberdeen": Range("40:85").EntireRow.Hidden = False
Range("40:49,53:57,77:78,80:80").EntireRow.Hidden = True
Case "Europe - Gateshead": Range("40:85").EntireRow.Hidden = False
Range("53:57").EntireRow.Hidden = True
Case "Middle East - Dubai": Range("40:85").EntireRow.Hidden = False
Range("43:43,46:47,50:57").EntireRow.Hidden = True
Case "Middle East - Saudi Arabia": Range("40:85").EntireRow.Hidden = False
Range("43:43,45:47,50:53").EntireRow.Hidden = True
Case "Middle East - All": Range("40:85").EntireRow.Hidden = False
Range("43:43,46:47,50:57").EntireRow.Hidden = True
Case "Far East - Singapore - Loyang": Range("40:85").EntireRow.Hidden = False
Range("41:41,44:57,77:78,80:80").EntireRow.Hidden = True
Case "Far East - Singapore - Tuas": Range("40:85").EntireRow.Hidden = False
Range("40:49,53:57,77:78,80:82").EntireRow.Hidden = True
Case "Far East - Singapore - All": Range("40:85").EntireRow.Hidden = False
Range("41:41,44:49,53:57,77:78,80:80").EntireRow.Hidden = True
Case "Far East - Perth - Australia": Range("40:85").EntireRow.Hidden = False
Range("41:57,63:63,67:67,72:72,74:83").EntireRow.Hidden = True
End Select
End If
End Sub
希望有比我更多知识的人可以提供帮助。
答案 0 :(得分:0)
您可以使用以下代码检查更改的单元格是否为D5:
If not Intersect(Target, Range("D5")) Is Nothing Then
它使用双重拒绝,所以它可能看起来很奇怪,但它应该有效。
这应该替换代码中的If Target.Address(False, False) = "D5" Then
。