Как да защитя таблицата?
Как мога да защитя една таблица така, че вече въведените данни да не могат да се трия или редактират без парола, а в същото време да могат да се вкарват нови данни в таблицата без парола?
Здравей, ето тук:
Заключване на една определена клетка в Excel
е показано как може да заключиш определени клетки от един лист в Ексел.
Здрасти . Видях го това, но не ми върши работа. Ясно е как се защитава клетка лист или цял файл. Може би не съм си задал правилно въпроса. Идеята е да се защитят въведените данни в обекта таблица, и в същото време да може да се добавят данни (редове и колони) без парола. Въведени един път данните да не могат да се редактират или трият без парола. Примера е следния: имаме таблица с данни която се развива във времето от различни потребители. Идеята е тези потребители да могат да допълват таблицата, но да не могат да редактират въведените по стари данни.
Така,
Имам данните в таблицата показани на снимка 1, съответно въвеждаме N на брой редове, запазваме и затваряме файла.
Отваряме файла отново (снимка 2) искаме въведените данни в листа по никакъв начин да не бъдат редактирани, освен от човека който има паролата.
Ето например въвеждам данни в коя да е клетка (снимка 2 позиция 1) и нямам проблем с това, опитвам се да отворя променя обаче клетка за която въведох данни в първото отваряне и запазване на файла, НО там не мога да си го позволя.
Съоветно запазвам файла пак с нововъведените стойности и го затварям.
Отварям файла отново (снимка 3). Мога да въведа какви да било данни (снимка 3 позиция 1 и 2), НО НЕ мога да редактирам не само клетките от първото отваряне, запазване и затваряне ами и от второто, (снимка 3 позиция 3 и 4)
При всяко затваряне на файла клетките със запис се заключват и само човека знаещ паролата може да ги редактира, в другите клетки имате възможност да въведете пак повтарям каквито и да било данни - текстови, числови, дати.
Надявам се това е крайната цел
Това може да се постигне посредством този VBA код:
Option Explicit
Dim wr As Range, wcell As Range
' this code goes at ThisWorkbook module <--------
Private Sub Workbook_Activate()
Initial
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Set wr = ThisWorkbook.Worksheets("S2").Range("a1:ad2000") ' editable range
For Each wcell In wr
Select Case wcell.Interior.ColorIndex
Case xlNone
' no action
Case Else
wcell.Interior.ColorIndex = xlNone
If wcell.Value <> "" Then wcell.Locked = True ' no more changes
End Select
Next
End Sub
Private Sub Workbook_Open()
Initial
End Sub
Sub Initial()
ThisWorkbook.Worksheets("S2").Protect Password:="krasi", userinterfaceonly:=True
Set wr = ThisWorkbook.Worksheets("S2").Range("a1:ad2000")
wr.Interior.ColorIndex = xlNone
For Each wcell In wr
wcell.Locked = False
If wcell.Value <> "" Then wcell.Locked = True
Next
End Sub
Съответно, трябва да си го напаснете спрямо вашия файл, тук е направен съвсем примерен за лист с определено име и с определен диапазон от клетки върху които се прилага естествено, в смисъл може да оставите част от листа където не искате да се изпълнява този код. Идеята е кода да се стартира при самото отваряне на файла, задължително.
Така че правиш кода да ти се старитира при отваряне на файла и съответно го нагласяш така че да отговаря на твоя файл и целта е постигната.
Може да смениш и паролата в момента тя е "krasi"
Надявам се да съм бил полезен с отговора.
Да много благодаря, точно това ми трябваше да разбера как става. Остава само да напредна малко с VBA и ще го пробвам. Все пак повечето неща в Excel могат да се направят по няколко различни начина. Дали няма и друг по лесен вариант за постигане на същото?
Ами на този етап е това което предложих по-горе.Ако искате нещо да се върши без външна намеса и искате динамичност, за мен най-удачния вариант е VBA.
Благодаря!
Здравейте, описаният начин от вас при мен не се получава. Въвеждам данни, запазвам ги, след това слагам паролата. Когато отворя листа с данните ми изисква парола, тоест защитата е на целия лист, а не само върху една област.
Получи ми се, след това обърнах внимание на това с CNTR+A за маркиране на страницата и премахване на отметката на locked, с който се премахват заключени клетки, ако има такива.