Dobrý den,
zámek funguje, děkuji za řešení. Bohužel není to kompletní, co potřebuji. Zámek musí být závislý na žlutých hodnotách v číselníku (pokud se vybere hodnota z žluté buňky, zámek se odemkne).
A ještě jedna věc, pokud by došlo k náhodnému výmazu hodnoty v oblasti A2:F10, tak se buňka ve sloupci L musí vymazat a znovu zamknout. Nesmí tam zůstat žádný údaj.
Omlouvám se, že takto obtěžuji, ale myslím si, že ve VBA by to mělo být pohodlnější, než to dělat přes funkce.
Jiří497 napsal/a:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim cell As Range
Dim i As Integer
Set KeyCells = Range("A1:F10")
If Intersect(Target, KeyCells) Is Nothing Then Exit Sub
i = 0
For Each cell In Range("A" & Target.Row & ":F" & Target.Row) 'kontrola, zda jsou všechny buňky v řádku A - F vyplněny
If Not IsEmpty(cell) Then 'když není buňka prázdná
i = i + 1 'připočítej 1
End If
Next cell
ActiveSheet.Unprotect
If i = 6 Then 'když jsou všechny buňky vyplněné
Range("L" & Target.Row).Locked = False 'buňku L odemkni
Else
Range("L" & Target.Row).Locked = True 'jinak zamkni
End If
ActiveSheet.Protect
End Sub
Příloha: 47362_mf_ciselniky.zip (16kB, staženo 4x)
Dobrý den,
Bohužel ve VBA vůbec neumím a řešení by mi velmi pomohlo.
Zámek je závislý na číselnících, viz příloha.
1) oblast A2:K10 musí být přístupná k editaci, s tím, že v části A2:F10 je možné vybírat pouze hodnoty z číselníků.
2) buňka v sloupci L zůstává uamčena do té doby, dokud není vyplněna oblast A2:F10, kde povolené hodnoty k odemčení zámku jsou pouze žlutě označené buňky z číselníku, viz příloha.
3) zámek musí fungovat vždy k příslušnému řádku. Pokud předcházející řádky mají hodnoty prázdné, nesmí to ovlivnit zámek v řádku, kde jsou hodnoty vyplněné správně.
4) Poslední věc je, že pokud by došlo k náhodnému výmazu hodnoty v oblasti A2:F10, tak se buňka ve sloupci L musí vymazat a znovu zamknout.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A1:F10")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then Exit Sub
ActiveSheet.Unprotect
If Target = "" Then
Target.Offset(, 11).Locked = True
Else
Target.Offset(, 11).Locked = False
End If
ActiveSheet.Protect
End Sub
Omlouvám se, že obtěžuji, ale moc by mi toto řešení pomohlo. Děkuji.
Dobrý den,
Mám zámek na buňce D1, který se odemkne, pokud jiná buňka A1 obsahuje nějaký text / hodnotu.
Můžete, prosím, poradit, jak automaticky opakovat výše uvedené pro každý další řádek?
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
ActiveSheet.Unprotect
If Target = "" Then
Range("D1").Locked = True
ElseIf Target <> "" Then
Range("D1").Locked = False
End If
ActiveSheet.Protect
End Sub
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.