【发布时间】:2019-09-18 09:17:38
【问题描述】:
如果一组工作表满足特定条件,我会尝试取消隐藏它们。这使用由命令按钮触发的用户表单,带有选择选项和另一个命令按钮。预期的行为是,一旦做出选择并按下按钮,所有符合条件的工作表都将被取消隐藏。 Target 字出现在第一行的不同位置,并且在该行之前的所有单元格都是空的。理想情况下,该过程将扫描工作簿中每个工作表的第一行中的每个单元格,直到遇到Target,取消隐藏工作表,然后移动到下一个工作表以重新开始该过程,直到所有工作表与工作簿已经检查过了。
激活用户表单上的命令按钮后,我得到以下信息:
Private Sub ContinueCommand_Click()
Dim Valid As Boolean, wks As Worksheet, c As Integer, actCol As Long
actCol = ActiveSheet.Range("A1").End(xlToRight).Column
For Each wks In ActiveWorkbook.Worksheets
For c = 1 To actCol
If ActiveCell.Value = "Target" Then
wks.Visible = xlSheetVisible
Exit For
End If
Next c
Next wks
Valid = True
If Valid = True Then
Unload Me
End If
End Sub
我从多个来源借用,包括使用 ActiveCell 的 here、determining if a value exists、unhidding worksheets、Finding values within a range 和 searching for a string。任何帮助将不胜感激。
【问题讨论】:
-
不要使用
ActiveCell。相反,您可能想要If wks.Cells(1, actCol) ...之类的东西,假设“目标”字符串在第 1 行。 -
可以用
wks.Visible = Not IsError(Application.Match("Target",wks.Range("1:1"),0))替换IF和内循环 -
另外,如果你说
Target之前的所有单元格都是空的,那么目标将在wks.Range("A1")或wks.Range("A1").End(xlToRight)中。无需再次遍历row 1中的所有单元格。 -
您可以将
actCol=行向下移动到下一行下方,除非所有工作表的列数相同,否则您会遗漏一些。