我不是那么“聪明的代码”,所以当我凝视着下面的混乱时,我非常抱歉伤害了你经验丰富的眼睛:)
目标:在主工作表中创建一个简单的过滤器,仅显示符合单元格中特定值的工作表。
主表单称为“MEGAFILTER”,其他表单称为“1”,“2”,“3”等。(无引号)
到目前为止我是如何工作的(再次,对不起!):
Sub MEGAFILTER()
'
' MEGAFILTER Macro
'
'
Sheets("MEGAFILTER").Select
Range("A1").Select
Dim Filter As String
Filter = ActiveCell.Value
'This makes sure all sheets are visible (for subsequent filtering)
For Each ws In ActiveWorkbook.Worksheets
ws.Visible = xlSheetVisible
Next ws
'This is where the real mess kicks in
Sheets("1").Select
If [M2] = Filter Then
Sheets("1").Visible = True
Else
Sheets("1").Visible = False
End If
Sheets("2").Select
If [M2] = Filter Then
Sheets("2").Visible = True
Else
Sheets("2").Visible = False
End If
Sheets("MEGAFILTER").Select
Sheets("3").Select
If [M2] = Filter Then
Sheets("3").Visible = True
Else
Sheets("3").Visible = False
End If
Sheets("MEGAFILTER").Select
'ETC...
End Sub
这样覆盖100张。如果存在70张纸,当然在尝试选择71时会崩溃。“MEGAFILTER”选择确保它在崩溃之前总是落在主纸张上。我意识到这很糟糕,但我没有成功地做出正确的方式:(
以下是我认为它应该是:
Sub MEGAFILTER()
'
' MEGAFILTER Macro
'
'
Sheets("MEGAFILTER").Select
Range("A1").Select
Dim Filter As String
Dim ws As Worksheet
Filter = ActiveCell.Value
For Each ws In ActiveWorkbook.Worksheets
ws.Visible = xlSheetVisible
Next ws
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "MEGAFILTER" Then
If [M2] = Filter Then
ws.Visible = True
Else
ws.Visible = False
End If
Next ws
End If
End Sub
但是我得到了一个“Next without For”错误。目的是它跳过主表(它不应该隐藏那个)并将单元M2中的值与主表上单元格A1中的值进行比较。如果值相同,则应显示工作表,否则应显示工作表。然后它应该移动到下一张纸,直到检查完所有。
信不信由你,在我发布这个问题之前,我花了几个小时研究了各种各样的组合。我觉得自己像个白痴......
我希望有人可以纠正我的“创造力”。谢谢你的阅读!
提米
答案 0 :(得分:0)
这应该有效:
Public Sub MegaFilter()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Mega Filter" Then
ws.Visible = ws.Cells(2, 13) = ThisWorkbook.Worksheets("Mega Filter").Cells(1, 1)
End If
Next ws
End Sub
它检查每个工作表上的单元格M2
(Cells(2,13)
)是否等于Mega Filter
上的单元格A1。
在Excel VBA TRUE = -1
和FALSE = 0
中。 xlSheetHidden
的数值为0
,xlSheetVisible
为-1
。
因此,如果M2 = A1,则返回TRUE(-1)并使工作表可见,否则返回FALSE(0)并隐藏工作表。
答案 1 :(得分:0)
Sub HideSheet()
Dim sheet As Worksheet
Set sheet = ActiveSheet
' this hides the sheet but users will be able
' to unhide it using the Excel UI
sheet.Visible = xlSheetHidden
' this hides the sheet so that it can only be made visible using VBA
sheet.Visible = xlSheetVeryHidden
End Sub