Just nu i M3-nätverket
Gå till innehåll

Låsa en rad med hjälp av ett aktivt val


avtak

Rekommendera Poster

Jag skulle vilja veta om det går att låsa en rad med data efter man gjort ett aktivt val i en exempelvis dropdownlista

 

Ska förtydliga min fråga

 

Om jag har data mellan mellan A1 och A10 så skulle jag vilja kunna låsa raden för korrigering om jag väljer "låsa rad" i en dropdownlista respektive låsa upp raden om jag väljer "låsa upp" i samma meny (eller att kryssa för en checkbox)

 

Anledningen till att jag vill ha denna funktion är för att det kommer vara många personer inne i kalkybladet och jag vill förhindra att man skriver över ny data i en redan skriven rad. Målgruppen som kommer att skriva i excel har 0 kunskaper om att låsa rader med hjälp av den manuella funktionen, samt att det ska vara användarvänligt.

 

Är detta möjligt?

Länk till kommentar
Dela på andra webbplatser

Visst går det. Bara ta händelsefunktioner som är kopplad till den kontroll du använder och skriva in något i stil med

Private Sub CheckBox1_Click()

Me.Protect "dummy", userinterfaceonly:=True
Me.Rows(1).Locked = Me.CheckBox1.Value
End Sub

första raden behöver egentligen bara köras en gång under hela tiden boken är öppen, dvs den kan köras i Worbook_Open exempelvis. Den gör så att VBA-koden kan göra ändringar på ett låst blad utan att behöva låsa upp bladet.

Länk till kommentar
Dela på andra webbplatser

Visst går det. Bara ta händelsefunktioner som är kopplad till den kontroll du använder och skriva in något i stil med

Private Sub CheckBox1_Click()

Me.Protect "dummy", userinterfaceonly:=True
Me.Rows(1).Locked = Me.CheckBox1.Value
End Sub

första raden behöver egentligen bara köras en gång under hela tiden boken är öppen, dvs den kan köras i Worbook_Open exempelvis. Den gör så att VBA-koden kan göra ändringar på ett låst blad utan att behöva låsa upp bladet.

 

----------------

 

? Tack för ett mycket snabbt svar (som vanligt). Nu hänger jag inte riktigt med vad jag ska göra. Ska följande kodrader in i vb editorn? Sen då? Mycket tacksam för ett förtydligande.

Länk till kommentar
Dela på andra webbplatser

Har du någon VBA-erfarenhet?

Låter inte som det.

 

men - skapa en kryssruta (ActiveX/VBA kontroll). Dubbelklicka på den och du kommer i funktionen jag har använd i exemplet.

 

Kopiera in koden där och testa. Innan du testar, lås bladet med samma lösenord som du har i koden.

 

Sedan när du testad, försök förstå vad som sker :)

 

Efter det kan du göra samma sak med annan kontroll och även kanske anpassa så att rätt rad/celler blir låsta. Ett bra sett att fixa det senare är att namnge områden på bladet och använda namnen i koden:

Me.Range("MinaCellerSomSkaLåsas").Locked = True

Länk till kommentar
Dela på andra webbplatser

Har du någon VBA-erfarenhet?

Låter inte som det.

 

men - skapa en kryssruta (ActiveX/VBA kontroll). Dubbelklicka på den och du kommer i funktionen jag har använd i exemplet.

 

Kopiera in koden där och testa. Innan du testar, lås bladet med samma lösenord som du har i koden.

 

Sedan när du testad, försök förstå vad som sker :)

 

Efter det kan du göra samma sak med annan kontroll och även kanske anpassa så att rätt rad/celler blir låsta. Ett bra sett att fixa det senare är att namnge områden på bladet och använda namnen i koden:

Me.Range("MinaCellerSomSkaLåsas").Locked = True

 

 

 

Tack! Nu fungerade det.

 

En fråga till som har med detta att göra. Låt säga att jag har har data mellan A1 och J1 som jag vill låsa med hjälp av denna checkbok. Är det möjligt att när jag fyller i data i J1 så aktiveras checkboxen automatiskt?

 

En sak till jag märkte nu jag arbetade med checkboxen. Detta fungerar bara till 1 rad. Nu är det så att listan kommer ha ca 500 rader. Jag villkoppla en checkbox (med låsfunktion) till varje rad. Har infogat Me.Range("MinaCellerSomSkaLåsas").Locked = True i koden samt angett vilka celler som ska låsas men det fungerar bara på första raden. Om jag göra om proceduren och infogar en ny ckeckbox och kopplar en ny kod samt anger nya cellreferenser i ovannämnda kodsnutt så händer ingenting. Vad gör jag för fel?

Länk till kommentar
Dela på andra webbplatser

Vette tusan vad du gör galet...

(men notera att du bör både låsa och låsa upp, alltid sätta Locked = True ger ju att alltid låser)

 

Och en kryssruta per rad? 500 kryssrutor?

 

Jag kan tänka min många enklare metoder...

För varje kryssruta blir det ju även en unik kodsnutt. En massa kodsnuttar (okej det går att lösa på annat sätt via klasser men det är överkurs).

Enklare. exempelvis, om användaren anger vilken rad som ska redigeras, värdena kopieras upp till område där användaren kan skriva och kod skriver in värdena på rätt plats i listan.

Alternativt att man på annat vis sorterar fram den releventa informationen. Att ha en kryssruta per rad... jobbigt.

 

 

En fråga till som har med detta att göra. Låt säga att jag har har data mellan A1 och J1 som jag vill låsa med hjälp av denna checkbok. Är det möjligt att när jag fyller i data i J1 så aktiveras checkboxen automatiskt?

Visst går det men då blandar vi in händelsefunktioner som tittar på bladet och generellt brukar jag rekommendera att dessa undviks.

 

Tror du ska ta ett steg tillbaka och fundera på layouten på detta blad. Låter onödigt komplext det du gör. En bra modell för Excel är ofta att tänka som om det är en databas man har.

1: En tabell. Snyggt uppställd.

2: En presentation. kan vara tabellen, sorterad på visst sätt, eller en rapportsida som tar fram relevanta data.

3: En inmatningsfunktion. Användaren är aldrig i tabellen utan arbetar via inmatningsfält som validerar det som matas in och sparar det på rätt plats.

 

Passar inte alltid men ofta.

Länk till kommentar
Dela på andra webbplatser

Har du någon VBA-erfarenhet?

Låter inte som det.

 

men - skapa en kryssruta (ActiveX/VBA kontroll). Dubbelklicka på den och du kommer i funktionen jag har använd i exemplet.

 

Kopiera in koden där och testa. Innan du testar, lås bladet med samma lösenord som du har i koden.

 

Sedan när du testad, försök förstå vad som sker :)

 

Efter det kan du göra samma sak med annan kontroll och även kanske anpassa så att rätt rad/celler blir låsta. Ett bra sett att fixa det senare är att namnge områden på bladet och använda namnen i koden:

Me.Range("MinaCellerSomSkaLåsas").Locked = True

 

Nu har jag försökt att pilla med detta ett bra tag utan resultat. Nedan är en redogörelse för vad jag gjort steg för steg.

 

1 Det jag har gjort är att jag hämtat upp två checkboxar genom fler kontroller (Microsoft Form 2.0 checkbox). Ena hetar Checbox1 och den andra heter CheckBox2.

2. Sedan har jag gett rad 1 och rad 2 ett namn i excelarket (radEtt & radTvå)

3. Sedan har jag lagt in följande rader i VB editorn (ett villkor för respektive checkbox)

 

Private Sub CheckBox1_Click()
Me.Protect "", userinterfaceonly:=True
   	Me.Rows(1).Locked = Me.CheckBox1.Value
Me.Range("radEtt").Locked = True
End Sub
Private Sub CheckBox2_Click()
Me.Protect "", userinterfaceonly:=True
   	Me.Rows(1).Locked = Me.CheckBox2.Value
Me.Range("radTvå").Locked = True
End Sub

 

När jag kör macrot så fungerar det som de ska på rad 1 men inte på rad 2. På rad 2 måste jag låsa upp dokumentet som "vanligt" i excel. Vad har jag gjort för fel???

Länk till kommentar
Dela på andra webbplatser

Ditt exempel fungerar bra för mig. Det låser/låser upp rad 1 och låser radTvå/radEtt-områdena.

Notera, enbart låser de senare.

 

Se även mitt tidigare svar.

Länk till kommentar
Dela på andra webbplatser

Ditt exempel fungerar bra för mig. Det låser/låser upp rad 1 och låser radTvå/radEtt-områdena.

Notera, enbart låser de senare.

 

Se även mitt tidigare svar.

 

 

vad skriver jag för att kunna låsa/låsa upp på rad 2?

Länk till kommentar
Dela på andra webbplatser

Me.Range("radTvå").Locked =  Me.CheckBox2.Value

exempelvis.

 

 

 

 

 

Underbart. Tack för hjälpen.... Nu fungerade det

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...