Avatar billede sjssjdk Mester
06. juni 2016 - 12:49 Der er 11 kommentarer og
1 løsning

Macro skjul sheet

Hej.

Kan nogen hjælpe mig med en maco der skjuler og viser et sheet basseret på en værdi i en celle?

Fx.
Hvis A1=X så vises sheet1
Hvis A1 ingen værdi har er sheet1 skjult

Er der nogen der kan hjælpe med dette spørgsmål?

På forhånd tak.
Søren
Avatar billede jkrons Professor
06. juni 2016 - 13:16 #1
Private Sub Worksheet_Change(ByVal Target As Range)
    If UCase(Range("a1").Value) = "X" Then
        Sheets(1).Visible = True
    Else
        Sheets(1).Visible = False
    End If
End Sub

Husk, at koden skal ligge på Arkets kodeark, altså det ark, hvor du sætter krydset - og det m å ikke være i Ark1 ;-)
Avatar billede sjssjdk Mester
07. juni 2016 - 08:01 #2
Hej.

Det løser problemet. Men hvordan gør jeg hvis jeg gerne vil gøre det ved et specifikt ark? denne funktion skjuleder det første ark, men ikke et bestemt ark.
Jeg skal gerne bruge funktionen til at skjule flere forskellige ark.

Kan du også hjælpe med denne udbyggelse af macrone?

På forhånd tak.
Avatar billede jkrons Professor
08. juni 2016 - 10:24 #3
Koden kan godt udvides, men hvo0rdan foretræker du, at det bliver gjort? Den ene mulighed er at ændre koden, så du hele tiden bruger den samme celle, men taster noget forskelligt, afhængigt af, hvilket ark, der skal skjules. Den anden er at du fx har ti celler, du kan sætte kryds i, og så lader cellen være afgørende for, hvilnet ark, der skal skjules.
Avatar billede sjssjdk Mester
08. juni 2016 - 11:09 #4
Den sidste beskrivelse du har.

Så jeg har x antal celler fx "X" i A1 = "ark1" bliver synlig, B1 = "ark2" bliver synlig osv.

Dog vil jeg gerne sådan at den referere til et navn på et ark frem for ark1 som den forrige version gjorde.

Kan det lade sig gøre?
Avatar billede jkrons Professor
08. juni 2016 - 14:42 #5
Jeg kigger på det, men du kan ikke gøre det med alle ark. Der skal altid være et synligt, hvor du sætter krydserne.
Avatar billede jkrons Professor
08. juni 2016 - 15:21 #6
Her er noget, som jegt tror virker. Det forudsætter at koden ligger på Ark1, hvor krydserne også skal sættes i cellerne A1 til H1. A1 skjuler Ark2, B1 ark 3 og så videre. A1 kan ikke skjules på denne måde, da du så ikke har noget sted at taste.

Du kan sætte x eller X. Der kan bygges mere fejlghåndtering ind i koden, men det har jeg ikke tid til desværre. Koden er lige nu indrettet til at kunne skjule 8 ark, men kan nemt udvides til flere. Så skal de bare kopiere en Så skal du bare kopiere fra Case Is til første End If, altså fx

Case Is = "$D$1"
        If UCase(Range(tar).Value) = "X" Then
            Sheets(5).Visible = True
        Else
            Sheets(5).Visible = False
        End If

Så skal du rette den celle, som den skal se på, og det ark, der skal vises/skjules.

Hele koden kommer her:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tar As String
    tar = Target.Address
    On Error GoTo err

    Select Case tar
    Case Is = "$A$1"
        If UCase(Range(tar).Value) = "X" Then
            Sheets(2).Visible = True
        Else
            Sheets(2).Visible = False
        End If
    Case Is = "$B$1"
        If UCase(Range(tar).Value) = "X" Then
            Sheets(3).Visible = True
        Else
            Sheets(3).Visible = False
        End If
    Case Is = "$C$1"
        If UCase(Range(tar).Value) = "X" Then
            Sheets(4).Visible = True
        Else
            Sheets(4).Visible = False
        End If
    Case Is = "$D$1"
        If UCase(Range(tar).Value) = "X" Then
            Sheets(5).Visible = True
        Else
            Sheets(5).Visible = False
        End If
    Case Is = "$E$1"
        If UCase(Range(tar).Value) = "X" Then
            Sheets(6).Visible = True
        Else
            Sheets(6).Visible = False
        End If
    Case Is = "$F$1"
        If UCase(Range(tar).Value) = "X" Then
            Sheets(7).Visible = True
        Else
            Sheets(7).Visible = False
        End If
    Case Is = "$G$1"
        If UCase(Range(tar).Value) = "X" Then
            Sheets(8).Visible = True
        Else
            Sheets(8).Visible = False
        End If
    Case Is = "$H$1"
        If UCase(Range(tar).Value) = "X" Then
            Sheets(9).Visible = True
        Else
            Sheets(9).Visible = False
        End If
    Case Else
        Exit Sub
    End Select
err:

    If err.Number = 9 Then
        MsgBox "Du kan ikke vise og skjule et ark, som ikke eksisterer. Prøv med et andet ark!", vbCritical + vbOKOnly
    End If

End Sub

Hvis du prøver at vise/skjule et ark, som ikke findes i mappen kommer der en fejlmeddelse, både når du skriver x og når du sletter det.
Avatar billede jkrons Professor
08. juni 2016 - 15:22 #7
Og beklager opstillingen. Eksperten kan tilsyneladende ikke lide indrykninger, eller eogså er det mig, der misser noget.
Avatar billede sjssjdk Mester
09. juni 2016 - 07:16 #8
Det viker jo helt perfekt! :)
Eneste lille mulig ændring.
Kan man navngive arket?

Jeg har behov for at arket ikke hedder sheet1 men at jeg kan navngive det som jeg vil.
Er det muligt? hvis jeg omdåber et ark nu, så virker intet af det.
Avatar billede jkrons Professor
09. juni 2016 - 09:53 #9
Du kan navngive arket præcist som du vil. Koden bruger arkets nummer i rækkefølgen, ikke dets navn.
Avatar billede jkrons Professor
09. juni 2016 - 12:08 #10
Det virker som om regnearket under visse omstændigheder "mister evnen" til at afvikle hændelser, så når du sætter et x, opdager makroen ikke, at der er sket en ændring. Derfor virker den selvfølgelig heller ikke.

Jeg har prøvet at gøre det, at jeg afvikler en anden makro, hvorefter den første virker igen, og det samme gælder hvis jeg lukker og genåbner regnearket. Du kan prøve med nedenstående meget kortere kode, som jeg harf fået fra en tysk Excel specialist og som er meget kortere end min. Han mener, at den måske kan løse problemet:

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("A1:H1")) Is Nothing _
    Or Target.Count > 1 Then Exit Sub

Sheets(Target.Column + 1).Visible = (UCase(Target) = "X")
End Sub
Avatar billede sjssjdk Mester
13. juni 2016 - 14:42 #11
Det løste problemet. Med en lille modifikation. row i stedet for column.

1000-tak for hjælpen.
Avatar billede jkrons Professor
13. juni 2016 - 23:04 #12
Velbekomme.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester