为了工作,我试图弄清楚当您在列中键入特定单词时如何在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工作表。
如果您可以帮助我,这将是一个帮助!
答案 0 :(得分:0)
只需列出您的工作表名称为数组即可。遍历该数组,并使用WorksheetFunction.Match method检查工作表名称是否存在于C列中以隐藏或显示工作表。
请注意,如果在C列中未找到工作表名称,Application.Match
将返回错误,因此我们使用它来触发隐藏/显示。
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