Otestováno a....
Hází mi to chybu při otevření souboru
"Run-time error 1004"
Nebyly nalezeny žádné buňky.
Zastaví se to na 7. řádku
.SpecialCells(xlCellTypeFormulas).Locked = True
Zkusil jsem to v odemknutém listu, pak jsem odemkl pole buněk a zamkl list na dané heslo. Nic
Stále to hází chybu.
Na webu jsem našel následující:
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.
_______________________________________________
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"
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.
Toto je přesně co potřebuji a funguje bez chyby, ovšem nevýhoda je nemožnost opravy zadaných dat před uložením souboru.
Následuje úprava:
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 listu1 do 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.
Smazal jsem tedy makro v modulu listu a do modulu ThisWorkbook jsem zkopíroval inovaci.
Výsledek je opět chyba.
Tak nevím, co dělám špatně
citovat