25. oktober 2007 - 09:11Der 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
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
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
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
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
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
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"
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..
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
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
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
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
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..
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
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..
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..
Synes godt om
Ny brugerNybegynder
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.