Avatar billede olehen Nybegynder
25. oktober 2007 - 09:11 Der er 21 kommentarer og
1 løsning

Protection + ekstra funktion

Jeg har lavet en macro der kan låse og oplåse alle ark på engang. Via en inputboks kan man selv bestemme password og filen bliver gemt med dette..

Samtidigt er der nogle ark der bliver gemt når jeg låser arkene.

Problemet er når jeg vil låse op igen. Indsætter jeg Ark1.Visible = xlSheetsvisible i UnProtectAllSheets sub og jeg ikke indtaster noget password eller et forkert så viser den ark1 alligevel men stadig låst. Hvordan får jeg den til ikke at vise ark1 hvis der ikke indtastes password eller et forkert password.

Så den kun viser ark1 ved det rigtige password. 


Dim ws As Worksheet
    Dim sOrigSheet As String
    Dim sOrigCell As String
    Dim sPWord As String
   
Sub ProtectAllSheets()
       
    Application.ScreenUpdating = False
    sOrigSheet = ActiveSheet.Name
    sOrigCell = ActiveCell.Address
   
    On Error Resume Next
    sPWord = InputBox("What password?", "Protect All")
    If sPWord > "" Then
        For Each ws In Worksheets
          ws.Select
            ws.Protect Password:=sPWord
    Next ws
    End If

    Ark1.Visible = xlSheetVeryHidden
    Ark2.Visible = xlSheetVeryHidden
    ark3.Visible = xlSheetVeryHidden
    Application.Goto Reference:=Worksheets("" & sOrigSheet & "").Range("" & sOrigCell & "")
    Application.ScreenUpdating = True
End Sub

Sub UnProtectAllSheets()
   
    Application.ScreenUpdating = False
    sOrigSheet = ActiveSheet.Name
    sOrigCell = ActiveCell.Address
   
    On Error Resume Next
    sPWord = InputBox("What password?", "Unprotect All")
    For Each ws In Worksheets
        If ws.ProtectContents = True Then
        ws.Unprotect Password:=sPWord
        End If
    Next ws
   
    ark1.Visible = xlSheetVisible
    Application.Goto Reference:=Worksheets("" & sOrigSheet & "").Range("" & sOrigCell & "")
    Application.ScreenUpdating = True
End Sub
Avatar billede jlemming Nybegynder
25. oktober 2007 - 09:32 #1
Du kan evt. sætte denne kode ind, der hvor du har
  ark1.Visible = xlSheetVisible


    If Sheets("ark1").ProtectContents = False Then
        ark1.Visible = False
    End If
Avatar billede jlemming Nybegynder
25. oktober 2007 - 09:40 #2
eller erstat

  For Each ws In Worksheets
        If ws.ProtectContents = True Then
        ws.Unprotect Password:=sPWord
        End If
    Next ws
 
med denne

For Each ws In Worksheets
        If ws.ProtectContents = True Then
            ws.Unprotect Password:=spword
            If ws.ProtectContents = True Then
                ws.Visible = False
            End If
        End If
Avatar billede jlemming Nybegynder
25. oktober 2007 - 09:45 #3
prøver igen

udskift dette
  For Each ws In Worksheets
        If ws.ProtectContents = True Then
        ws.Unprotect Password:=sPWord
        End If
    Next ws
   
    ark1.Visible = xlSheetVisible

med dette
    For Each ws In Worksheets
        If ws.ProtectContents = True Then
            ws.Unprotect Password:=spword
            If ws.ProtectContents = True Then
                ws.Visible = False
            End If
        End If
    Next ws
Avatar billede olehen Nybegynder
25. oktober 2007 - 10:04 #4
Den første du viser:

If Sheets("ark1").ProtectContents = False Then
        ark1.Visible = False
    End If

som erstatning for ark1.Visible = xlSheetVisible er ok da den ikke viser arket hvis inputboksen er tom eller med forkert kode. Men når jeg indtaster det rigtige kodeord så viser den stadig ikke ark1. Så det var halvvejs..

Det samme gør sig gældende hvis jeg indsætter den som du har vist i de to andre..

Ark1 vises ikke selvom det er med rigtig passwword..

Jeg har for protect "Ctrl+R" og for unprotect "Ctrl+E"
Avatar billede olehen Nybegynder
25. oktober 2007 - 10:08 #5
Men så kan jeg ligeså godt lade være med at skrive ark1.Visible = xlSheetVisible
det i unprotect, det opnår jeg samme virkning med..
Avatar billede jlemming Nybegynder
25. oktober 2007 - 10:22 #6
så prøv denne
sætter alle synlig; hvis ark låst? så usynlig

    For Each ws In Worksheets
        ws.Unprotect Password:=spword
        ws.Visible = True
        If ws.ProtectContents = True Then
            ws.Visible = False
        End If
    Next ws
Avatar billede olehen Nybegynder
25. oktober 2007 - 10:37 #7
Køre jeg unprotect og undlader at indtaste password så gemmer den jo alle ark udentag det ark jeg står i. Det dur ikke..

Har du selv prøvet macroen af?
Avatar billede jlemming Nybegynder
25. oktober 2007 - 11:02 #8
ja da,
det er fordi der skal altid være et synlig ark
Avatar billede olehen Nybegynder
25. oktober 2007 - 11:37 #9
Men jeg har 4 ark der altid skal være synlige. af disse er der kun 1 der er låst de andre er til fri afbenyttelse. Derudover er der 3 ark som er låste og gemt..

Måske det kan være med til at forklare situationen..
Avatar billede olehen Nybegynder
25. oktober 2007 - 11:38 #10
Så i alt er der 7ark
Avatar billede jlemming Nybegynder
25. oktober 2007 - 11:44 #11
så tror du bare skal bruge denne


If Sheets("ark1").ProtectContents = true Then
        ark1.Visible = False
End If

indsæt den for hver ark, som du ønsker gemt

skal erstatte denne:
  ark1.Visible = xlSheetVisible
Avatar billede olehen Nybegynder
25. oktober 2007 - 12:21 #12
Den vil du bruger på følgende måde i Unprotect sub ik!!

Synes bare ikke jeg kan få den til at vise ark1 igen..

Sub UnProtectAllSheets()
   
    Application.ScreenUpdating = False
    sOrigSheet = ActiveSheet.Name
    sOrigCell = ActiveCell.Address
   
    On Error Resume Next
    sPWord = InputBox("What password?", "Unprotect All")
      For Each ws In Worksheets
        If ws.ProtectContents = True Then
        ws.Unprotect Password:=sPWord
        End If
        If Sheets("ark1").ProtectContents = True Then
            ark1.Visible = False
          End If
    Next ws
   
    Application.Goto Reference:=Worksheets("" & sOrigSheet & "").Range("" & sOrigCell & "")
    Application.ScreenUpdating = True
End Sub
Avatar billede jlemming Nybegynder
25. oktober 2007 - 13:10 #13
dette er mere korrekt men det andet virker nok også

Sub UnProtectAllSheets()
   
    Application.ScreenUpdating = False
    sOrigSheet = ActiveSheet.Name
    sOrigCell = ActiveCell.Address
   
    On Error Resume Next
    sPWord = InputBox("What password?", "Unprotect All")
      For Each ws In Worksheets
        If ws.ProtectContents = True Then
        ws.Unprotect Password:=sPWord
        End If
    Next ws
        If Sheets("ark1").ProtectContents = True Then
            ark1.Visible = False
          End If
        If Sheets("ark2").ProtectContents = True Then
            ark2.Visible = False
          End If
   
    Application.Goto Reference:=Worksheets("" & sOrigSheet & "").Range("" & sOrigCell & "")
    Application.ScreenUpdating = True
End Sub
Avatar billede olehen Nybegynder
25. oktober 2007 - 13:39 #14
Jeg har prøvet det som du sagde.. Men de kommer ikke frem med den rigtige kode igen.. Der er kun de 4ark som ikke bliver gemt.. Hvorfor??

Dim ws As Worksheet
    Dim sOrigSheet As String
    Dim sOrigCell As String
    Dim sPWord As String
   
Sub ProtectAllSheets()
       
    Application.ScreenUpdating = False
    sOrigSheet = ActiveSheet.Name
    sOrigCell = ActiveCell.Address
   
    On Error Resume Next
    sPWord = InputBox("What password?", "Protect All")
    If sPWord > "" Then
        For Each ws In Worksheets
          ws.Select
            ws.Protect Password:=sPWord
    Next ws
    End If
   
    If sPWord <> "" Then
    RateMatrix.Visible = xlSheetVeryHidden
    Lister.Visible = xlSheetVeryHidden
    CashFlowLocal.Visible = xlSheetVeryHidden
    End If
    Application.Goto Reference:=Worksheets("" & sOrigSheet & "").Range("" & sOrigCell & "")
    Application.ScreenUpdating = True
End Sub

Sub UnProtectAllSheets()
   
    Application.ScreenUpdating = False
    sOrigSheet = ActiveSheet.Name
    sOrigCell = ActiveCell.Address
   
    On Error Resume Next
    sPWord = InputBox("What password?", "Unprotect All")
      For Each ws In Worksheets
        If ws.ProtectContents = True Then
        ws.Unprotect Password:=sPWord
        End If
    Next ws
   
    If Sheets(Lister).ProtectContents = True Then
        Lister.Visible = False
    End If
    If Sheets(RateMatrix).ProtectContents = True Then
        RateMatrix.Visible = False
    End If
    If Sheets(CashFlowLocal).ProtectContents = True Then
        CashFlowLocal.Visible = False
    End If
   
    Application.Goto Reference:=Worksheets("" & sOrigSheet & "").Range("" & sOrigCell & "")
    Application.ScreenUpdating = True
End Sub
Avatar billede jlemming Nybegynder
25. oktober 2007 - 14:00 #15
Du mangler "" omkring
forkert:
If Sheets(CashFlowLocal).ProtectContents = True Then

korrekt:

If Sheets("CashFlowLocal").ProtectContents = True Then
Avatar billede olehen Nybegynder
25. oktober 2007 - 14:30 #16
Med eller uden.. De kommer ikke frem alligevel.. Det er dælme underligt hvis det virker ved dig..
Avatar billede jlemming Nybegynder
25. oktober 2007 - 14:41 #17
Det skal virke :o)

If Sheets("CashFlowLocal").ProtectContents = True Then
        Sheets("CashFlowLocal").Visible = False
End If
Avatar billede olehen Nybegynder
25. oktober 2007 - 21:34 #18
Nu har jeg prøvet på en anden computer - hvor jeg byggede arkene op fra starten igen.. Og alligevel kan jeg ikke få de tre ark frem igen, når jeg køre unprotect..

Vil du sende en kopi af dit regneark, hvis det virker hos dig??? Jeg fatter simpelhen ikke havde der er galt.. Har prøvet alle dine forslag også det sidste..
Avatar billede jlemming Nybegynder
25. oktober 2007 - 22:36 #19
ja, det ser ud at det ikke virker, beklager :o(

prøv denne istedet

Sub UnProtectAllSheets()
   
    Application.ScreenUpdating = False
    sOrigSheet = ActiveSheet.Name
    sOrigCell = ActiveCell.Address
   
    On Error Resume Next
    sPWord = InputBox("What password?", "Unprotect All")
    For Each ws In Worksheets
        ws.Unprotect Password:=sPWord
        ws.Visible = True
    Next ws
   
    If Sheets("ark1").ProtectContents = True Then
        Sheets("ark1").Visible = False
    End If
    If Sheets("ark2").ProtectContents = True Then
        Sheets("ark2").Visible = False
    End If
    If Sheets("ark3").ProtectContents = True Then
        Sheets("ark3").Visible = False
    End If
   
    Application.Goto Reference:=Worksheets("" & sOrigSheet & "").Range("" & sOrigCell & "")
    Application.ScreenUpdating = True
End Sub
Avatar billede olehen Nybegynder
26. oktober 2007 - 09:49 #20
Hej jlemming,

Så har jeg fået det til at virke.. Skulle lige ændre lidt i koden til de ark jeg vil have vist igen..

Jeg tror problemet var lå i at jeg have give arkene nye navne, men med en anden caption. Og du referede til caption hvorimod jeg arbejde med "name". Men her er kode stumpen som gør det sidste muligt, og hvor der referes til name og ikke arknes caption...

Ved at bruge "name" istedet for caption gør jeg det muligt at man kan ændre caption uden at skulle pille i koden.. 

On Error Resume Next
    sPWord = InputBox("What password?", "Unprotect All")
      For Each ws In Worksheets
        ws.Unprotect Password:=sPWord
        ws.Visible = True
    Next ws
   
    If ark1.ProtectContents = True Then
        ark1.Visible = False
    End If
    If ark2.ProtectContents = True Then
        ark2.Visible = False
    End If
    If ark3.ProtectContents = True Then
        ark3.Visible = False
    End If

Men læg et svar, så får du pointene. Det var super du kunne hjælpe mig på vej..
Avatar billede jlemming Nybegynder
26. oktober 2007 - 10:03 #21
nååå, ja, det havde jeg ikke opdaget. :o)
ja det er mest strukturet at bruge "name"
Avatar billede olehen Nybegynder
26. oktober 2007 - 11:34 #22
Men man må sige det virker.. Det er super smart at koden nu er gemt i en streng, da den dermed ikke kan gennemskues ud fra koden, samt man kan ændre password uden at skulle ind og ændre i koden.

Endnu en gang tak for hjælpen..
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