Avatar billede Bent Praktikant
14. januar 2025 - 15:11 Der er 8 kommentarer

Lås ark

Jeg har et problem Jeg ikke selv kan løse.
Sikkert et lille problem for en ekspert.
Jeg ønsker at låse et ark automatisk efter årets udløb.
Enten hele arket, eller 4-5 celler
Jeg har prøvet med dato/tal men har nogle konsekvenser, så det er ikke en mulighed.
I arket er der celler der i forvejen er låst, samt er der benyttet frys celler.
Måske kan en Marco designes til denne opgave.
Ps. Hvis det har relevans bruger Jeg Excel 365

Mvh  Bent
Avatar billede jens48 Ekspert
14. januar 2025 - 16:59 #1
Nedenstående makro, som skal lægges ind under ThisWorkbook, låser et valgt område, hvis datoen i A1 ikke er i år

Private Sub Workbook_Open()
If Year(Range("A1")) <> Year(Now) Then
ActiveSheet.Unprotect   
Range("B3:C5,C7:C9").Select ' område(r) der skal låses
  Selection.Locked = True
  Selection.FormulaHidden = False
  Range("A1").Select   
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
End Sub
Avatar billede Bent Praktikant
14. januar 2025 - 18:16 #2
Tusind tak for svar Jens, Jeg prøver det, om Jeg kan få det til at virke efter hensigten
Avatar billede Bent Praktikant
14. januar 2025 - 18:56 #3
Det ville være en stor hjælp hvis denne løsning er tilpasset til dansk Excel.
på forhånd tak
Avatar billede jens48 Ekspert
14. januar 2025 - 19:24 #4
Makroer skrives altid på engelsk. Den skal derfor ikke oversættes
Avatar billede Bent Praktikant
14. januar 2025 - 19:41 #5
Okay noteret
Avatar billede MaxZpaD Guru
15. januar 2025 - 08:30 #6
Er der ét og kun ét ark i den pågældende projektmappe?

Den foreslåede makro, som kører, når projektmappen (filen) åbnes, håndterer udelukkende det ark (ActiveSheet), som er aktivt ved filens åbning.

Såfremt der er flere ark i projektmappen, vil jeg foreslå, at makroen oprettes som en Workbook_SheetActivate-event i stedet for Workbook_Open.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    With Sh
        If Year(.Range("A1")) > Year(Now) Then
            .Unprotect
            With .Range("B3:C5,C7:C9") 'Tilpas område som skal låses
                .Locked = True
                .FormulaHidden = False
            End With
            .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
    End With
End Sub

Hvis forskellige ark har forskellige områder, der skal låses, skal der selvfølgelig også tages højde for det.
Avatar billede MaxZpaD Guru
15. januar 2025 - 08:36 #7
Alternativt kan makroen kodes, så den gennemløber alle ark, når projektmappen åbnes.

Private Sub Workbook_Open()
    Dim Sh As Worksheet
   
    For Each Sh In Me.Worksheets
        With Sh
            If Year(.Range("A1")) > Year(Now) Then
                .Unprotect
                With .Range("B3:C5,C7:C9") 'Tilpas område som skal låses
                    .Locked = True
                    .FormulaHidden = False
                End With
                .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            End If
        End With
    Next Sh
End Sub
Avatar billede MaxZpaD Guru
15. januar 2025 - 08:38 #8
Lille fejl ... jeg fik kun skrevet "> Year(Now) ".

Det skal enten være "< Year(Now)" (tidligere år) eller evt. "<> Year(Now)", hvis der skal låses for alle årstal, der er forskellige fra indeværende år.
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
Stort udvalg af Excel kurser til alle niveauer og jobfunktioner

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





White paper
Sikkerhed gjort enkelt: Beskyt din virksomhed direkte i browseren