Avatar billede CHC Forsker
16. december 2019 - 09:54 Der 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

----------------------------------------------------------

Sub VisAlleFaner()
' Viser alle faner

    Dim wks As Worksheet
   
    Application.ScreenUpdating = False
       
    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
Avatar billede Jan K Ekspert
16. december 2019 - 10:10 #1
Start din kode med

    ActiveSheet.Unprotect i det ark medd knappen.

Slut den med

Activesheet.Protect
Avatar billede CHC Forsker
16. december 2019 - 15:08 #2
Hej Jan K

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

Vh CHC
Avatar billede Jan K Ekspert
17. december 2019 - 12:19 #3
Ja. Hvis funktionen kræver at arket er låst op, skal koden gøre det.
Avatar billede CHC Forsker
20. december 2019 - 07:28 #4
Hej Jan K

Ovenstående virkede desværre ikke.

Er det ikke fordi jeg skal have en kode, der "unprotecter" alle de ark, som via knappen "vælges" (eller rettere sagt at de øvrige skjules).

Vh CHC
Avatar billede CHC Forsker
23. december 2019 - 08:44 #5
Hej

Andre kvalificerede bud modtages MEGET gerne.

På forhånd tak.

Vh CHC
Avatar billede CHC Forsker
30. december 2019 - 09:32 #6
Hej

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
   
End Sub

Jeg håber på en løsning fra en af jer eksperter.

Vh CHC
Avatar billede Jan K Ekspert
30. december 2019 - 11:48 #7
Du har to Fim S as Workseet i samme Sub.
Avatar billede Jan K Ekspert
30. december 2019 - 11:48 #8
Dim, ikke Fim 😬
Avatar billede CHC Forsker
30. december 2019 - 12:01 #9
Hej Jan K

Godt spottet, tak - nu virker det!

Vh CHC
Avatar billede store-morten Ekspert
30. december 2019 - 12:04 #10
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
   
    Application.ScreenUpdating = True
End Sub
Avatar billede CHC Forsker
30. december 2019 - 12:33 #11
Hej store-morten

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!

Vh CHC
Avatar billede store-morten Ekspert
30. december 2019 - 13:50 #12
Velbekomme 🎅
Avatar billede CHC Forsker
30. december 2019 - 13:52 #13
Hej

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
   
    Application.ScreenUpdating = True
End Sub

Vh CHC
Avatar billede store-morten Ekspert
30. december 2019 - 14:09 #14
Prøv:
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
 
    Application.ScreenUpdating = True
End Sub
Avatar billede CHC Forsker
30. december 2019 - 17:59 #15
Tak, store-morten. Du er en konge!

Vh CHC
Avatar billede store-morten Ekspert
30. december 2019 - 18:49 #16
Tak 🤴 og 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