» Poradna » Programy

Excel-makro

 |   | 

Prosím o pomoc.

Potřeboval bych makro , které by pracovalo asi takto.
V listu1 budu mít tabulku , do které budou různí uživatelé vyplňovat různá data (převážně čísla).
Potřebuji aby se tabulka nebo raději celý list automaticky zamykal a to tím způsobem, že po vyplnění volných polí
a zavření sešitu (uložení) se automaticky uzamknou vepsaná data a volné buňky zůstanou odemčeny pro další vložení dat dalším uživatelem odemčeny.
Jednoduše postupně se budou po uložení zamykat všechny neprázdné buňky v listu1, tak aby zapsaná data nešly následně změnit.
Půjde to nějak řešit ....pomůžete?
Děkuji.

Mohlo by vás také zajímat

Odpovědi na otázku

 |   | 

To makro by nebyl problém. Pro jeho naprogramování doporučuji makrokameru. Pro spuštění doporučuji umístit tlačítko s textem například "Zapsat uložit a zavřít"

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Pozadovane lze resit takto:
Na prislusnem listu (list1) zrusit uzamceni bunek v pozadovane oblasti (napr.: A1:E20 a G1:G20).
V editoru VBA (Alt+F11) vlozit procedury:
do modulu Tento_sesit - heslo je "password" (bez uvozovek) - zmenit, heslo neni podminku, lze pripadne vynechat:

Option Explicit

Private Sub Workbook_Open()
Worksheets("list1").Protect Password:="password", UserInterfaceOnly:=True
End Sub

a do modulu prislusneho listu - list1:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Target.Resize(1, 1)
If Not Intersect(Me.Range("a1:e20,g1:g20"), Target) Is Nothing Then
Target.Locked = True
End If
End Sub

Po zapisu do bunky v pozadovane oblasti bude bunka uzamknuta.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Bezesporu funkcni, ale ponekud nestastne reseni. Zamykani v ev. Change nepripousti opravu pri zadavani dat. Myslim, ze by se melo zamykat az Before Save.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Tazatel se k moznemu reseni zatim nevyjadril, ale lze i takto:
Namisto procedury Worksheet_Change v modulu listu vlozit pro drive zminenou oblast bunek na listu1do modulu Tento_sesit napriklad tuto proceduru:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim BlkL As Range, Cll As Range
Set BlkL = Worksheets("list1").Range("a1:e20,g1:g20")
For Each Cll In BlkL.Cells
If Cll.Value vbNullString Then Cll.Locked = True
Next Cll
Set Cll = Nothing
Set BlkL = Nothing
End Sub

a bude uzamykat bunky pri zavirani sesitu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Děkuji moc , ano varianta zamčení po uložení sešitu se mi jeví lepší.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Různí uživatelé, Zapsaná data