Visa enskilda grupperingars detaljer i skyddat arbetsblad

Här demonstreras ett relativt enkelt förfarande för att visa detaljer i en disposition där vi endast vill tillåta användaren  kan välja månad. Noterbart är att ett XL4-makro används för att visa en månads underliggande data.

Exemplet har sin utgångspunkt i följande disposition:

 

 

Proceduren nedan stänger eventuella öppnade grupperingar, inhämtar önskad månad från användaren och visar den valda månadens detaljer.

 

Option Explicit  

Sub Visa_Delgrupp()

   '© 2003 Alla rättigheter XL-Dennis

   Dim stManad As String, stRad As String

   Dim vaManader As Variant

   Dim i As Long, lnCheck As Long

   Dim bFlag As Boolean

   Dim wsBlad As Worksheet

   Dim rnManader As Range, rnHitta As Range

 

   Set wsBlad = ActiveSheet

 

   With wsBlad

      Set rnManader = .Range(.Range("A2"), .Range("A65536").End(xlUp))

   End With

 

   vaManader = Array("Jan", "Feb", "Mar", "Apr")

 

   Application.ScreenUpdating = False

 

   With wsBlad

      .Unprotect Password:=""

      'Ser till att eventuella öppna grupperingar stängs.

      .Outline.ShowLevels RowLevels:=1

   End With

 

   'Tilldelar den logiska variabeln ett startvärde samt den
  
'andra nödvändiga variabeln.

   bFlag = False

   lnCheck = 0

 

   'Här använder vi två loopar för kontroll av inmatat värde.

   Do While bFlag <> True

      Do While stManad = "" Or lnCheck <> 1

         stManad = Application.InputBox("Ange önskad månad", "Månadsdetaljer", Type:=2)

         'Kontroll om användaren avbröt dialogrutan eller inte.

         If stManad = "Falskt" Then

            ActiveSheet.Protect Password:=""

            Exit Sub

         End If

 

         'Kontroll av det inmatade månadsvärdet.

         For i = LBound(vaManader) To UBound(vaManader)

            If stManad = vaManader(i) Then

               'Variabeln tilldelas värdet 1 för att avsluta den innersta loopen.

               lnCheck = 1

               'Om det inmatade värdet återfinns i matrisen tilldelas den logiska
              
'variabeln värdet Sant.

               bFlag = True

            End If

         Next i

      Loop

   Loop

 

   'Identifiera vilken grupp som ska expanderas.
  
'Här vet vi redan att det inmatade värdet finns i cellområdet genom kontrollen ovan.

   With rnManader

      Set rnHitta = .Find(What:=stManad, LookIn:=xlWhole)

      If Not rnHitta Is Nothing Then

         stRad = rnHitta.Row

      End If

   End With
 

   'Här används ett XL4-makro för att expandera den önskade månadsgruppen.

   ExecuteExcel4Macro "SHOW.DETAIL(1," & stRad & ")"

 

   wsBlad.Protect Password:=""

   Application.ScreenUpdating = True

End Sub

 

Så här uppställning ut efter det att ovanstående procedur har exekverats och där månaden mars angavs som önskad månad: