16. december 2019 - 09:54Der er
13 kommentarer og 3 løsninger
Knap 'Vis valgte faner' (VBA) virker ikke, efter at ark er blevet låst
Hej
Jeg har en excel-fil med en masse ark, hvor jeg på et ark kan sætte flueben i felter, som får celler til at ændre status til "gyldig". På næste ark kan jeg klikke på en "Vis Gyldige" knap, så der på dette ark kun vises de fra foregående ark valgte afkrydsninger. Derefter kan jeg klikke på en 'Vis valgte faner' knap, som derefter skjuler de ikke valgte faner. Det har virket fint, indtil seneste ændring, hvor jeg har beskyttet projektmappen og låst nogle af cellerne i arkene.
Kan man lave en .unprotect hhv. -protect kode eller hvad gør man?
Jeg er ikke 100 meter mester i VBA og har tidligere fået assistance til nedenstående koder for hhv. 'Vis valgte vaner' og 'Vis alle faner', så jeg håber at I kan assistere med dette.
Har det noget at gøre med celle H9? ------------------------------------- Sub SkjulVis() ' Viser kun valgte faner
Dim wks As Worksheet For Each wks In Worksheets If wks.Range("H9").Value2 = "Ikke gyldig" Then wks.Visible = xlSheetHidden End If If wks.Range("H9").Value2 = "Gyldig" Then wks.Visible = xlSheetVisible End If Next End Sub
For Each wks In Worksheets If wks.Range("H9").Value2 = "Ikke gyldig" Or wks.Range("H9").Value2 = "Gyldig" Then wks.Visible = xlSheetVisible End If Worksheets(4).Select Next
Application.ScreenUpdating = True
End Sub ----------------------------------------- Vh CHC
Tak for dit svar. Jeg har flere knapper, så jeg skal lige vide, hvilken en du refererer til. Er det den knap som giver fejlen? Altså 'Vis valgte faner' knappen, som vist i nedenstående?
Sub SkjulVis() ' Viser kun valgte faner
ActiveSheet.Unprotect Dim wks As Worksheet For Each wks In Worksheets If wks.Range("H9").Value2 = "Ikke gyldig" Then wks.Visible = xlSheetHidden End If If wks.Range("H9").Value2 = "Gyldig" Then wks.Visible = xlSheetVisible End If Next Activesheet.Protect End Sub
Jeg har forsøgt mig lidt frem selv, bl.a. med nedenstående, som fjerner beskyttelsen af arkene. Det fungerer fint, men jeg vil også gerne have arkene låst igen efter kørsel af makroen. Kan det lade sig gøre?
Sub SkjulVis() ' Viser kun valgte faner
Dim s As Worksheet For Each s In ActiveWorkbook.Sheets s.unprotect Next
Dim wks As Worksheet For Each wks In Worksheets If wks.Range("H9").Value2 = "Ikke gyldig" Then wks.Visible = xlSheetHidden End If If wks.Range("H9").Value2 = "Gyldig" Then wks.Visible = xlSheetVisible End If Next
End Sub
Efter ovenstående forsøgte jeg med flg., men det gav en "Compile error: Duplicate deklaration in current scope" (som jeg ikke fatter noget af). Der kom en gul pil og gul markering af teksten "Sub SkjulVis()"
Sub SkjulVis() ' Viser kun valgte faner
Dim s As Worksheet For Each s In ActiveWorkbook.Sheets s.unprotect Next
Dim wks As Worksheet For Each wks In Worksheets If wks.Range("H9").Value2 = "Ikke gyldig" Then wks.Visible = xlSheetHidden End If If wks.Range("H9").Value2 = "Gyldig" Then wks.Visible = xlSheetVisible End If Next
Dim s As Worksheet For Each s In ActiveWorkbook.Sheets s.protect Next
Prøv at putte Unprotect/Protect ind i For Each wks In Worksheets:
Sub VisAlleFaner() ' Viser alle faner Dim wks As Worksheet Application.ScreenUpdating = False
For Each wks In Worksheets wks.Unprotect If wks.Range("H9").Value2 = "Ikke gyldig" Or _ wks.Range("H9").Value2 = "Gyldig" Then wks.Visible = xlSheetVisible End If wks.Protect Next 'Worksheets(4).Select Application.ScreenUpdating = True End Sub
Sub SkjulVis() ' Viser kun valgte faner Dim wks As Worksheet Application.ScreenUpdating = False
For Each wks In Worksheets wks.Unprotect If wks.Range("H9").Value2 = "Ikke gyldig" Then wks.Visible = xlSheetHidden End If If wks.Range("H9").Value2 = "Gyldig" Then wks.Visible = xlSheetVisible End If wks.Protect Next
Tak for hjælpen. Jeg havde godt nok lige fundet en løsning selv, men tak alligevel. Din løsning viser ikke skærmopdateringen, hvilket er at foretrække, så den ikke står og flimrer. Super, tak!
En ny udfordring er opstået! Kan der i nedenstående tilføjes noget kode, så objekter kan redigeres efter beskyttelse?
Sub SkjulVis() ' Viser kun valgte faner Dim wks As Worksheet Application.ScreenUpdating = False
For Each wks In Worksheets wks.Unprotect If wks.Range("H9").Value2 = "Ikke gyldig" Then wks.Visible = xlSheetHidden End If If wks.Range("H9").Value2 = "Gyldig" Then wks.Visible = xlSheetVisible End If wks.Protect Next
Sub SkjulVis() ' Viser kun valgte faner Dim wks As Worksheet Application.ScreenUpdating = False
For Each wks In Worksheets wks.Unprotect If wks.Range("H9").Value2 = "Ikke gyldig" Then wks.Visible = xlSheetHidden End If If wks.Range("H9").Value2 = "Gyldig" Then wks.Visible = xlSheetVisible End If wks.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True Next
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.