Excel: Įvedus duomenis, celė užrakinama

Atėjo laikas priminti, kad aš dar ir Excel’iu dirbu ir šiuo tuo apie tai pasidalinu. O pasidalinsiu labai faina makrokomanda, kuri užrakina celę, kai į ją ką nors įrašai.

Taigi darbe iš skyriaus kuriame dirba tik merginos gavau užduotį – parengti joms failus, kuriuose jos pildys visokią info apie savo organizuojamus darbus. Atsiųstoje įsivaizduojamoje būsimo dokumento formoje buvo pridėta visokių komentarų, kaip kur kas turi atrodyti. Aš įsijautęs pridariau visokių pribumbasų ir navarotų, ir tik po to sužinojau, kad ten kai kurie komentarai netyčia buvo įkopijuoti ir į juos nereikia atsižvelgti. Teko daug ką ištrinti, o tarp ištrintų dalykų buvo ir makro komanda, kuri užrakina celę, kai kas nors į ją įrašoma.

Kur ir kaip įvesti makrokomandą galite rasti čia, na, o kodas atrodo šitaip:

Option Explicit
Dim blnUnlockedAllCells As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)

Const RangeToLock As String = „B:B,L:L“ ‘<< Nurodomi stulpeliai, kuriuose turi veikti komanda

If Target.Cells.Count > 1 Then Exit Sub

Application.EnableEvents = False
If Target.Column = 1 Then
Target.Offset(0, 1).Value = VBA.Now
Target.Offset(0, 1).Locked = True
Target.Offset(0, 10).Select
ElseIf Target.Column = 11 Then
Target.Offset(1, -10).Select
ElseIf Not Application.Intersect(Target, Me.Range(CStr(RangeToLock))) Is Nothing Then
If Len(Target) Then Target.Locked = True
End If
Application.EnableEvents = True

If Not blnUnlockedAllCells Then
Me.Cells.Locked = False
On Error Resume Next
Me.Range(CStr(RangeToLock)).SpecialCells(2).Locked = True
On Error GoTo 0
blnUnlockedAllCells = True
Me.Protect Password:=“pwd“, userinterfaceonly:=True
End If

End Sub

Šiuo atveju komanda veikia tik B ir L stulpeliuose. Norint, kad ji veiktų ir kaikuriuose kituose stulpeliuose, juos visus reikėtų įrašyti 5-oje eilutėje, šalia „B:B,L:L“.

Pasidalink nuomone