Beskytte celler i Excel, men la disse bli endret av VBA script

stemmer
49

Jeg bruker Excel hvor enkelte felt er tillatt for brukerundersøkelser og andre celler som skal beskyttes. Jeg har brukt Tools Beskytt ark, men etter å gjøre dette er jeg ikke i stand til å endre verdiene i VBA script. Jeg trenger å begrense arket for å stoppe brukerinngang, samtidig tillate VBA-kode for å endre celleverdier basert på visse beregninger.

Publisert på 24/09/2008 klokken 02:43
kilden bruker
På andre språk...                            


6 svar

stemmer
3

Jeg tror ikke du kan sette noen del av arket for å være redigerbar bare av VBA , men du kan gjøre noe som har i utgangspunktet samme effekt - du kan oppheve regneark i VBA før du trenger å gjøre endringer:

wksht.Unprotect()

og re-beskytte den etter at du er ferdig:

wksht.Protect()

Edit: Ser ut som denne løsningen kan ha løst Dheer umiddelbare problem, men for alle som kommer over denne spørsmål / svar senere, jeg tok feil om den første delen av svaret mitt, som Joe påpeker nedenfor. Du kan beskytte et ark å redigeres av VBA-bare, men det vises "UserInterfaceOnly" alternativet kan bare angis når du ringer "Worksheet.Protect" i kode.

Svarte 24/09/2008 kl. 03:04
kilden bruker

stemmer
79

Prøv å bruke

Worksheet.Protect "Password", UserInterfaceOnly := True

Dersom UserInterfaceOnly parameteren settes til sann, kan VBA kode modifisere beskyttede celler.

Svarte 24/09/2008 kl. 06:29
kilden bruker

stemmer
16

Du kan endre et ark via kode ved å ta disse handlingene

  • Opphev
  • endre
  • Beskytte

I kode vil dette være:

Sub UnProtect_Modify_Protect()

  ThisWorkbook.Worksheets("Sheet1").Unprotect Password:="Password"
'Unprotect

  ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed"
'Modify

  ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password"
'Protect

End Sub

Den svakhet med denne metoden er at hvis koden blir avbrutt og feilhåndtering fanger ikke det, kan regnearket stå i en ubeskyttet tilstand.

Koden kan forbedres ved å ta disse handlingene

  • Re-beskytte
  • endre

Koden å gjøre dette ville være:

Sub Re-Protect_Modify()

ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _
 UserInterfaceOnly:=True
'Protect, even if already protected

  ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed"
'Modify

End Sub

Denne koden fornyer beskyttelse i regnearket, men med 'UserInterfaceOnly' satt til true. Dette gjør VBA-kode for å endre regnearket, samtidig som regnearket beskyttet mot brukerundersøkelser via brukergrensesnittet, selv om utførelsen blir avbrutt.

Denne innstillingen er tapt når arbeidsboken er lukket og gjenåpnet. Regnearket beskyttelse er fortsatt opprettholdt.

Så den 'Re-beskyttelse' koden må inkluderes i starten av noen prosedyre som forsøker å endre regnearket, eller kan bare kjøres en gang når arbeidsboken åpnes.

Svarte 24/09/2008 kl. 10:14
kilden bruker

stemmer
1

En grunnleggende, men enkel å forstå svaret:

Sub Example()
    ActiveSheet.Unprotect
    Program logic...
    ActiveSheet.Protect
End Sub
Svarte 10/02/2014 kl. 13:36
kilden bruker

stemmer
0

Som en midlertidig løsning, kan du opprette en skjult regneark , som ville holde den endrede verdien. Cellen på den synlige, beskyttet arket skulle vise verdien av den skjulte arket ved hjelp av en enkel formel.

Du vil være i stand til å endre den viste verdien gjennom skjulte regnearket , mens brukerne ikke vil være i stand til å redigere den.

Svarte 21/02/2017 kl. 23:45
kilden bruker

stemmer
0

Jeg valgte cellene jeg ønsket låst ute i Ark1 og plassere den foreslåtte koden i open_workbook () funksjon og fungerte som en sjarm.

ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _
UserInterfaceOnly:=True
Svarte 12/05/2017 kl. 05:42
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more