首页 > 解决方案 > 组合的 Sub Worksheet_Change(ByVal Target As Range)代码未触发

问题描述

好的,我有两组代码,下面的第二组代码可以根据另一个选择完美地隐藏和取消隐藏单元格。然后,我还需要保护整个表单,并且只有在另一个单元格中有数据时才取消保护单元格(这仍然是解锁的)。

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

如果可能的话,在这个上画一个空白,需要一些帮助。

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

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

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

标签: vbaexcel

解决方案


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

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

它使用双重拒绝,所以它可能读起来很奇怪,但应该可以工作。

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


推荐阅读