excel - 根据多个单元格值隐藏或取消隐藏工作表
问题描述
对于工作,我试图弄清楚当您在列中键入特定单词时如何在 excel 中制作宏以取消隐藏工作表。
我对此完全陌生,所以这是一个很大的搜索。
到目前为止,我得到了这个:
Private Sub Worksheet_Change(ByVal Target As Range)
If [C2] = "POMP" Then
Sheets("POMP").Visible = True
Else
Sheets("POMP").Visible = False
End If
If [C2] = "TANK" Then
Sheets("TANK").Visible = True
Else
Sheets("TANK").Visible = False
End If
If [C2] = "VENTILATOR" Then
Sheets("VENTILATOR").Visible = True
Else
Sheets("VENTILATOR").Visible = False
End If
If [C2] = "MOTOR" Then
Sheets("MOTOR").Visible = True
Else
Sheets("MOTOR").Visible = False
End If
End Sub
这只是一个更大项目的示例。到目前为止它有效。当我在 C2 中键入 MOTOR 时,MOTOR 选项卡将取消隐藏。也为其他人。但..
它实际上必须适用于整个 C 列,而不仅仅是 C2。
有人可以帮我解决这个问题吗?
还有另一个问题。如果在输入单词时必须取消隐藏 2 张纸,我该如何将其放入代码中。示例:我键入 MOTOR,然后应该取消隐藏 MOTOR 和 POMP 表。
如果你能帮我解决这个问题,那将是一个很大的帮助!
解决方案
只需将您的工作表名称列表作为数组。遍历该数组并使用WorksheetFunction.Match 方法检查工作表名称是否存在于 C 列中以隐藏或显示工作表。
请注意,Application.Match
如果在 C 列中找不到工作表名称,则会返回错误,因此我们使用它来触发隐藏/显示。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim SheetNames() As Variant
SheetNames = Array("POMP", "TANK", "VENTILATOR", "MOTOR") 'list your sheet names here
Dim SheetName As Variant
For Each SheetName In SheetNames
Dim MatchedRow As Variant
MatchedRow = Application.Match(SheetName, Me.Columns("C"), 0)
On Error Resume Next 'catch error if sheet name does not exist
ThisWorkbook.Worksheets(SheetName).Visible = Not IsError(MatchedRow)
If Err.Number <> 0 Then MsgBox "Worksheet '" & SheetName & "' not found!", vbCritical
On Error GoTo 0
Next SheetName
End Sub
推荐阅读
- java - 如何使用泛型避免类型安全警告
- eclipse - Eclipse 大纲视图不显示排序图标
- python-3.x - 为什么'is'运算符在 Python - 3.6.8 中显示不同的结果?
- javascript - 如何通过 Python 使用 Selenium 将日期作为文本直接发送到具有只读属性的日历控件?
- serialization - 使用 json_serializable 序列化对象列表而不创建额外的类
- java - 使用 Stream.ofNullable 处理可为空的列表是否是不好的做法
- javascript - 变换图像上的无限动画
- python - Lambda 函数减去 x 和前一个元素
- python - 如何从分类器.predict_proba() 输出中获取前 n 个预测标签?
- android - 我如何从点击项目中的firebase数据库中获取子值