Just nu i M3-nätverket
Jump to content

Låsa upplåsta celler i låst arbetsblad...


cochese

Recommended Posts

Hej!

 

Jag har ett blad som är låst förutom kolumn B som utgör en uppställning där vissa rader/celler är upplåsta för en användare att registrerar utfallssiffror i. Jag vill sedan att användaren skall låsa cellerna de har angett värden i (detta skall kopplas till ett makro som låser alla celler samtidigt). Jag har gett behörigheten att formatera celler men när denna dialogruta tas fram (Ctrl+1) saknas fliken Skydd ,vilket jag antar beror på att arbetsbladet är låst. (Det är alltså inte meningen att användaren skall kunna låsa upp efter låsning.)

 

 

Går det att ordna, dvs att användaren kan låsa valda celler i ett låst arbetsblad?

 

Gäller Excel 2007

 

 

Lite uppdatering efter lite mer försök... är nästan i hamn... nu utgår jag från att jag som admin får gå in och låsa. Detta är hanterbart men måste kunna göras snabbt!

 

Jag har spelat in ett makro som låser upp bladet (då efterfrågas inlagt lösenord) och sedan låser aktuella celler för att sist låsa bladet igen. Problemet blir att när jag via inspelning av makro sätter ett lösenord vid låsningen så kommer ej makrot ihåg detta. Efter makrot är kört är det bara att låsa upp bladet som vanligt och inget lösenord efterfrågas.

 

Kan man direkt i koden ange ett ett fast lösenord läggs in när man låser bladet?

Link to comment
Share on other sites

Private Const pssWd = "test"

Sub SkyddaBlad(doProtect As Boolean)
With Blad1
	.Unprotect pssWd
	.Range("B2:b14").Locked = doProtect
	.Protect pssWd
End With
End Sub


Sub test1()
SkyddaBlad True
End Sub

 

Torde uppfylla dina önskemål. Anpassa referensen till din bok, det blad du arbeta med.

När man gör en Protect utan andra argument än lösenord kommer samma inställningar som var senaste bladet var låst att gälla.

Link to comment
Share on other sites

Private Const pssWd = "test"

Sub SkyddaBlad(doProtect As Boolean)
With Blad1
	.Unprotect pssWd
	.Range("B2:b14").Locked = doProtect
	.Protect pssWd
End With
End Sub


Sub test1()
SkyddaBlad True
End Sub

 

Torde uppfylla dina önskemål. Anpassa referensen till din bok, det blad du arbeta med.

När man gör en Protect utan andra argument än lösenord kommer samma inställningar som var senaste bladet var låst att gälla.

 

Hej

Får det tyvärr inte att funka, jag har aldrig justerat sådan kod utan endast "spelat in" makron tidigare så brister lite i kunskap här...

 

Nedan är det makro jag har spelat in och har jag skyddat bladet innan med ett lösenord så efterfrågas detta vid "ActiveSheet.Unprotect" men inget skydd genereras sedan på "ActiveSheet.Protect". Tacksam om du i koden nedan lägger in hur jag ska kunna få in lösenordsskyddet. Tack i förhand.

 

(Jag har svenskt Excel 2007 men det kanske inte spelar någon roll här.)

 

Sub Bildobjekt4_Klicka()

'

' Bildobjekt4_Klicka Makro

'

 

'

ActiveSheet.Unprotect

Range("B80:B81").Select

Selection.Locked = True

ActiveSheet.Protect

End Sub

Link to comment
Share on other sites

Nej, du, ta min kod istället. Det är samma kod som din fast lite bättre skriven. Jag förklarar vad du ska göra med den

Private Const pssWd = "test"

Sub SkyddaBlad(doProtect As Boolean)
With Blad1
.Unprotect pssWd
.Range("B2:b14").Locked = doProtect
.Protect pssWd
End With
End Sub

 

pssWd . byt test mot ditt lösenord.

 

Blad1 - några alternativ. Detta är referensen till ett arbetsblad.

byt det mot det

  • bladnamn i VBA som finns i din bok (det man som finns i projektutforskaren i VBA-editorn.
  • Me OM din kod finns på det blad du arbetar med
  • Worksheets("Bladnamn") där bladnamn är namnet som finns på namnlisten i Excel.

.Range("B2:B14") - ändra till den/de celler du vill arbeta med. Exempelvis .Range("B80:B81")

 

Vill du låsa cellerna, anropa med

SkyddaBlad True

Vill du låsa upp celler anropa med

SkyddaBlad False

 

Dvs från din bildknapp

Sub Bildobjekt4_Klicka()
SkyddaBlad True
End Sub 

 

Klarar du det nu?

Link to comment
Share on other sites

Kanon! Detta funkar fint!

 

Nu vill jag dock förfina denna funktion :)

 

Bladet är konstant skyddat med ett lösenord vilket är bra. Användaren kan låsa valda celler utan att ange ett lösenord vilket var vad jag ville.

 

Dock skall jag som admin vara den enda som kan låsa upp valda celler och gärna detta genom att lyfta ut "lås upp"-knappen till en annan fil som vi kallar Admin.xlsm. Hur skall koden vara i admin-filen för att först peka på ett annat arbetsblad (som heter Legalt.xlsm) och sedan i Blad1 skicka kommandot SkyddaBlad False

 

Alternativet kan vara att koppla ett lösen till knappen "lås upp" om ovan inte går att lösa.

Link to comment
Share on other sites

Då väljer jag att göra om koden enligt nedan

Sub SkyddaBlad()
Dim answ As String
With Blad1
If .Range("b2:b14").Locked Then
	answ = InputBox("Ange lösenord för att låsa upp cellerna.", "Låsa upp")
	If answ = pssWd Then
	.Unprotect pssWd
	.Range("b2:b14").Locked = False
	.Protect pssWd
	Else
	MsgBox "Fel lösenord", vbExclamation, "Fel"
	End If
Else

	.Unprotect pssWd
	.Range("B2:b14").Locked = True
	.Protect pssWd
End If
End With
End Sub

Notera dock att lösenordet står i klartext i koden, se till att låsa VBA-projektet så att dina undersåtar inte kan ställa till med oreda i boken.

 

Duger denna lösning?

Link to comment
Share on other sites

Jag ser vad denna lösning kommer göra och det skall fungera. Dock fungerar inte makrot kopplat till bildobjeketet längre och får

Kompileringsfel: fel antal argument eller felaktig egenskapsbildning

på ex raden SkyddaBlad True som jag la in kopplat till bildobjektet, samma sak på SkyddaBlad False

 

Varför sker detta?

 

PS: uppskattar din tid och hjälp mycket!

 

Koden:

Sub Bildobjekt4_Klicka()

SkyddaBlad True

Range("B83").Select

ActiveCell.FormulaR1C1 = "LÅST"

End Sub

Link to comment
Share on other sites

Tog bort argumentet till funktionen och nu kollar funktionen om området i fråga är låst eller ej. Om låst frågar koden efter lösen och om icke låst låser den området.

 

Läs koden!

 

Dvs anropa funktionen utan True/False och BORT med Select-satser!

Skriv istället

Range("B83") = "Låst"

men notera att om cellen låst kan du inte göra det...

 

Select/Activate och liknande satser är skräp som inspelad kod innehåller, det ska inte finnas i kod man skriver. Ställer bara till med problem. Ett tillfälle finns det som man kan använda detta, det är när man vill flytta användaren fokus till viss cell eller objekt.

Link to comment
Share on other sites

Nu börjar jag förstå så smått hur det hänger ihop och kan laborera lite själv. Har löst mitt problem och tackar så mycket för hjälpen!!

 

/Erik

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...