2013-11-14 234 views
1
Sub Hideall_butlast_10() 
Dim ws As Worksheet 
For Each ws In ActiveWorkbook.Worksheets 
ws.Visible = xlSheetVisible 
Next ws 

i = Worksheets.Count 
For x = 10 To i 
    Sheets(x).Select 
    ActiveSheet.Visible = xlSheetHidden 
Next x 
End Sub 

VBA:Excel中环 - 隐藏/取消隐藏表

我想修改我上面的代码取消隐藏所有工作表,然后隐藏所有工作表除第5个和最后10(10会改变) - 但前5个是始终显示

我的工作簿有网页50-300之间(每天的变化)

希望有人能指出我在正确的方向

由于

回答

4
Sub Hideall_butlast_10() 
    Dim ws As Worksheet 

    For Each ws In ActiveWorkbook.Worksheets 
     ws.Visible = xlSheetVisible 
    Next ws 

    Const lowerBound As Integer = 5 
    Const upperBound As Integer = 10 

    Dim i, x 
    i = Worksheets.Count 
    If (i > lowerBound + upperBound) Then 
     For x = lowerBound + 1 To (i - upperBound) 
      Sheets(x).Visible = xlSheetHidden 
     Next x 
    End If 
End Sub 
1

下面是一些在上面的代码我只是写了亚...

Public Enum ToggleSheets 
    Show = 1 
    Hide = 2 
    Toggle = 3 
End Enum 
Sub ToggleSheets(Optional ByVal startIndex As Integer = 1, Optional ByVal StopIndex As Integer = 0, Optional ByVal Toggle As Integer = Toggle) 
    If StopIndex = 0 Then StopIndex = ThisWorkbook.Sheets.Count 
    For i = startIndex To StopIndex 
     Select Case Toggle 
     Case Show 
      ThisWorkbook.Sheets(i).Visible = xlSheetVisible 
     Case Hide 
      ThisWorkbook.Sheets(i).Visible = xlSheetHidden 
     Case Toggle 
      If ThisWorkbook.Sheets(i).Visible = 0 Then 
       ToggleSheets i, i, Show 
      Else 
       ToggleSheets i, i, Hide 
      End If 
     End Select 
    Next 
End Sub 

样来电:

ToggleSheets , , hide'hides all sheets 

ToggleSheets 1,5, show 'displays first 5 sheets. 
togglesheets workbooks.count - 9, , show ' shows last 10 sheets 
0

我注意到,您只能选择薄片,和没有激活它。您需要在使用ActiveSheet对象之前“激活”工作表。

这里是你的代码的修改版本的作品:

Sub Hideall_butlast_10() 
Dim ws As Worksheet 

For Each ws In ActiveWorkbook.Worksheets 
ws.Visible = xlSheetVisible 
Next ws 

Dim i, x As Long 

i = Worksheets.Count 
For x = 1 To i - 10 
    Sheets(x).Activate 
    ActiveSheet.Visible = xlSheetHidden 
Next x 
End Sub 

这是我将如何实现它:

Option Explicit 

Sub HideAllSheets() 

Dim wkbBook As Excel.Workbook 
Dim wksSheet As Excel.Worksheet 

Set wkbBook = Excel.ActiveWorkbook 

On Error Resume Next ' to suppress the error that turns up when trying to hide the last sheet 
For Each wksSheet In wkbBook.Worksheets 
    wksSheet.Visible = xlSheetHidden 
Next wksSheet 
Err.Clear 
On Error GoTo 0 

End Sub 

Sub UnhideAllSheets() 

Dim wkbBook As Excel.Workbook 
Dim wksSheet As Excel.Worksheet 

Set wkbBook = Excel.ActiveWorkbook 

On Error Resume Next 
For Each wksSheet In wkbBook.Worksheets 
    wksSheet.Visible = xlSheetVisible 
Next wksSheet 
Err.Clear 
On Error GoTo 0 

End Sub 

Sub UnhideFirstXSheets(ByVal lngX As Long) 

Dim wkbBook As Excel.Workbook 
Set wkbBook = Excel.ActiveWorkbook 
Dim wksSheet As Excel.Worksheet 

Dim lngCount As Long 

For lngCount = 1 To lngX 
    Set wksSheet = wkbBook.Sheets(lngCount) 
    wksSheet.Visible = xlSheetVisible 
Next lngCount 

End Sub 

Sub UnhideLastXSheets(ByVal lngX As Long) 

Dim wkbBook As Excel.Workbook 
Set wkbBook = Excel.ActiveWorkbook 
Dim wksSheet As Excel.Worksheet 

Dim lngCount As Long 
Dim lngSheetCount As Long 
lngSheetCount = wkbBook.Worksheets.Count 

For lngCount = 1 To lngX 
    Set wksSheet = wkbBook.Sheets(lngSheetCount - lngCount + 1) 
    wksSheet.Visible = xlSheetVisible 
Next lngCount 

End Sub 

Sub DoWhatYouWant() 
Application.ScreenUpdating = False 
Application.EnableEvents = False 
Call UnhideAllSheets 'Unhide all the sheets (not really necessary 
Call HideAllSheets 'Hide everything. Leaves the last sheet visible, because all the sheets in a workbook cannot be hidden 
Call UnhideFirstXSheets(5) 'Unhides the first X sheets 
Call UnhideLastXSheets(10) 'Unhides the last X sheets 
Application.EnableEvents = True 
Application.ScreenUpdating = False 
End Sub 

运行“DoWhatYouWant”宏观和应该做的。根据您的要求随意更改5和10。

+0

如果页数小于5,UnhideFirstXSheets失败(错误#9),如果页数小于10,则UnhideLastXSheets失败。 – dee

+0

是,选择表使其成为活动页。当您选择多个表单时,通常会使用激活。例如,Sheet(x).Activate使Sheet(x)成为活动工作表,同时仍然保持其他工作表的选择。但通常Sheets(x).Select用于使Sheet(x)成为活动工作表。 – DaveU

+0

丹尼尔,你的意思是说,当你用小于5的数字来称呼它时,它就会失败。我不明白这个问题。你能提供更多的信息吗? –