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 ;-)
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?
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.
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.
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.
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
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.