11. januar 2002 - 11:23Der er
17 kommentarer og 2 løsninger
Betinget lås på celle
Hvordan kan man - som med f.eks. farve i betinget formatering - betinge adgangen til en celle. Jeg ønsker i kollone A at indtaste værdi. Ved nogle udvalgte værdier indsættes forskellige tekster i kolonne B med opslagsfunktion. Ved nogle værdien indsættes intet. Når intet indsættes ønsker jeg cellen åben for indtastning, mens den skal være låst, hvis indtastningen i kolonne A medfører værdi.
Det vil sige at det ikke umiddelbart er en uindbygget funktionalitet i Excel - dog er der åbner mere op for mulighederne for brugertilpassede adgange i XP
Indsæt i arkets eget modul. Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then ActiveSheet.Unprotect If Target.Offset(0, 1).Value = 0 Then Target.Offset(0, 1).Locked = False ActiveSheet.Protect End If
If (Target.Column = 2 And Target.Value = 0) Then ActiveSheet.Unprotect Target.Locked = True ActiveSheet.Protect End If End Sub
2 spørgsmål til bak: For det første er jeg kun vant til at indspille makroer, så jeg behøver guide til at kopiere din makro ind. For det andet læser jeg makroen som om det er hele arket du låser/låser op - er det korrekt?
Sorry, men test lige denne her i stedet for. arkets eget kodemodul findes ved at højreklikke på arkfanen, vælge vis koder og så kopier makroen ind.
Så marker kol B, under formater lås cellerne. beskyt arket.
Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Column = 1 And Target.Offset(0, 1).Value = 0) Then ActiveSheet.Unprotect Target.Offset(0, 1).Locked = False ActiveSheet.Protect End If
If Target.Column = 2 Then ActiveSheet.Unprotect Target.Locked = True ActiveSheet.Protect End If End Sub
række = Target.Offset(0, 1).Row kolonne = Target.Offset(0, 1).Column
If (Target.Column = 1) And (Target.Offset(0, 1).Value = \"\") Then ActiveSheet.Unprotect Range(Cells(række, kolonne), Cells(række, kolonne + 1)).Locked = False ActiveSheet.Protect End If
If Target.Column = 2 Then ActiveSheet.Unprotect Range(Cells(række, kolonne), Cells(række, kolonne + 1)).Locked = False ActiveSheet.Protect End If
række = Target.Offset(0, 1).Row kolonne = Target.Offset(0, 1).Column
If (Target.Column = 1) And (Target.Offset(0, 1).Value = \"\") Then ActiveSheet.Unprotect Range(Cells(række, kolonne), Cells(række, kolonne + 1)).Locked = False ActiveSheet.Protect End If
If Target.Column = 2 Then ActiveSheet.Unprotect Range(Cells(række, kolonne), Cells(række, kolonne + 1)).Locked = True ActiveSheet.Protect End If
Jeg er der næsten nu - men mine problemer skyldes nok, at jeg har ændret på forudsætningerne: Kolonne 1: Værdi indtastes (vælges fra liste) Kolonne 2: Værdi indtastes (vælges fra liste) Kolonne 3: (reelt 2 merged kolonner) er resultat af opslag baseret på værdien i kolonne 1. Det er denne - og kun denne kolonne, hvor cellen skal åbnes når værdien i cellen er tom (\"\") Kolonne 4: (reelt kolonne 5 efter de merged kolonner) Her har jeg nu problemer, da denne kolonne bliver låst??
Min tilrettede kode ser således ud: Sub Worksheet_Change(ByVal Target As Range)
række = Target.Offset(0, 1).Row kolonne = Target.Offset(0, 1).Column
If (Target.Column = 1) And (Target.Offset(0, 2).Value = \"\") Then ActiveSheet.Unprotect Range(Cells(række, kolonne), Cells(række, kolonne + 2)).Locked = False ActiveSheet.Protect End If
If Target.Column = 3 Then ActiveSheet.Unprotect Range(Cells(række, kolonne), Cells(række, kolonne + 2)).Locked = True ActiveSheet.Protect End If
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.