Vis/skjul side med hændelse

Opgaven her er at vise/skjule en side regnearket, når et bestemt forhold optræder. I dette tilfælde når en celle får værdien 0. Værdien opnås gennem beregninger på tal i et andet ark, men hvor tallene befinder sig har ingen praktisk betydning for løsningen.For at automatiserer vis/skjul ewr man nødt til at benytte sig af en hændelse, og Worksheet_Change kan ikke bruges, da den kun udløses ved en manuel rettelse i arket. I stedet anvendes Worksheet_Calculate, som udløses hver gang, der udføres beregninger i arket.

Mappen, der skal bruges indeholder minimum tre ark. Det ark, som celle B2 findes i. Et ark ved navn Alle og et ark ved navn Ingen data. Sidstnævnte ark er som udgangspunkt skjult.

Logikken er, at hvis værdien i B2 i det relevante ark bliver 0, skal arket Ingen Data vises i mappen og være aktivt på skærmen. Er værdien forskellig fra 0, skal arket være skjult og arket Alle skal være aktivt. I eksemplet står de tal, der påvirker formlen i B2 i arket Alle, men de kunne lige så godt stå alle andre steder.

Når arket Alle vises, skal tallene i området H10 til og med H1000 sorteres i stigende orden.

Nedenstående kode løser problemet

Private Sub Worksheet_Calculate()

    If Range("B2").Value = 0 Then
        Sheets("Ingen data").Visible = True
        Sheets("Ingen data").Activate
    ElseIf Range("B2").Value > 0 Then
        Sheets("Ingen data").Visible = False
        Sheets("Alle").Visible = True
        Sheets("Alle").Activate
        Sheets("Alle").Range("H10").Select
        ActiveWorkbook.Worksheets("Alle").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Alle").Sort.SortFields.Add Key:=Range("h10"), _
           SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Alle").Sort
            .SetRange Range("h10:h1000")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End If

End Sub

 

Skal funktionen i stedet for udføres, ved manuel indtastning, kan koden i stedet lægges på Worksheet_Change hændelsen. Her bør man dog tilføje denne linje som den første i koden

    If IsEmpty(Range("B2")) Then Exit Sub

for at forhindre at arket "Ingen data" vises, når man slettet indholdet af B2.

- Tilbage til makroer -
- Tilbage til Excel -