组合的Sub Worksheet_Change(ByVal Target As Range)代码未触发

时间:2018-05-07 14:00:39

标签: vba excel-vba excel

好的,我有两组代码,第二组代码隐藏和取消隐藏基于另一个选择的单元格完美无缺。我还需要保护整个表单,只有在另一个单元中有数据时才会保护单元格(这仍然是未锁定的。)

然而,要解锁的代码似乎没有解锁任何单元格 - 所以实际上它并没有做我需要它。我是这里的相对新手,从这些论坛和其他网站获取我的代码和想法,并随着时间的推移修改它们以满足我自己的需要。

通过此处填补空白,如果可能,需要一些帮助。

这是我的代码 - 第一部分是不解锁我输入的单元格范围的位。

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

希望有比我更多知识的人可以提供帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码检查更改的单元格是否为D5:

If not Intersect(Target, Range("D5")) Is Nothing Then

它使用双重拒绝,所以它可能看起来很奇怪,但它应该有效。

这应该替换代码中的If Target.Address(False, False) = "D5" Then