Как да защитя таблицата?

Microsoft Excel Електронни таблици Microsoft 365 Excel VBA Анализи с Excel

Как мога да защитя една таблица така, че вече въведените данни да не могат да се трия или редактират без парола, а в същото време да могат да се вкарват нови данни в таблицата без парола?

Здравей, ето тук:

Заключване на една определена клетка в Excel

е показано как може да заключиш определени клетки от един лист в Ексел.

Здрасти . Видях го това, но не ми върши работа. Ясно е как се защитава клетка лист или цял файл. Може би не съм си задал правилно въпроса. Идеята е да се защитят въведените данни в обекта таблица, и в същото време да може да се добавят данни (редове и колони) без парола. Въведени един път данните да не могат да се редактират или трият без парола. Примера е следния: имаме таблица с данни която се развива във времето от различни потребители. Идеята е тези потребители да могат да допълват таблицата, но да не могат да редактират въведените по стари данни.

Така,

Имам данните в таблицата показани на снимка 1, съответно въвеждаме N на брой редове, запазваме и затваряме файла.

Снимка_1

Отваряме файла отново (снимка 2) искаме въведените данни в листа по никакъв начин да не бъдат редактирани, освен от човека който има паролата.

Ето например въвеждам данни в коя да е клетка (снимка 2 позиция 1) и нямам проблем с това, опитвам се да отворя променя обаче клетка за която въведох данни в първото отваряне и запазване на файла, НО там не мога да си го позволя.

Снимка_2

Съоветно запазвам файла пак с нововъведените стойности и го затварям.

Отварям файла отново (снимка 3). Мога да въведа какви да било данни (снимка 3 позиция 1 и 2), НО НЕ мога да редактирам не само клетките от първото отваряне, запазване и затваряне ами и от второто, (снимка 3 позиция 3 и 4)

При всяко затваряне на файла клетките със запис се заключват и само човека знаещ паролата може да ги редактира, в другите клетки имате възможност да въведете пак повтарям каквито и да било данни - текстови, числови, дати.

Снимка_3

Надявам се това е крайната цел

Това може да се постигне посредством този 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, с който се премахват заключени клетки, ако има такива.


Вашият отговор

Научи компютърните програми онлайн от топ експертите на България
Регистрацията в АУЛА ви дава:
  • 20 безплатни урока
  • Трикове и тънкости за софтуера
  • Отговори на вашите въпроси
  • Регистрация