vba - 组合的 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
希望比我有更多知识的人可以提供帮助。
解决方案
您可以使用以下代码检查更改的单元格是否为 D5:
If not Intersect(Target, Range("D5")) Is Nothing Then
它使用双重拒绝,所以它可能读起来很奇怪,但应该可以工作。
这应该替换:If Target.Address(False, False) = "D5" Then
在您的代码中。
推荐阅读
- node.js - nodejs TRX gettransactionstothis 不起作用
- sql-server - 从一个地方远程访问另一个 MS SQL SERVER
- php - 不熟悉php中的数组函数术语
- scala - 如何在不使用内置库(如 distinct、groupBy(identity)、toSet 等)的情况下从列表中删除重复项
- r - 更改我的值以围绕某个点 R
- python - Python YAML dumper 单引号和双引号问题
- excel - 根据日期阈值对重复项的最大值求和
- python - 根据列表中的条件滞后一个值 - python
- r - R中的聚合列
- xlrd - xlrd 读取 Excel 文件并获取值