MS Excel lub Libre Office Calc - zabezpieczenie komórek hasłem?


(sensu) #1

Da się zabezpieczyć tylko wybrane komórki, tak aby można było je edytować wpisując wcześniej hasło lub ewentualnie potwierdzać okienko “czy jesteś pewny?” ?
Miałoby to na celu ochronę ważnych (ale rzadko używanych komórek) przed przypadkową edycją.


(krystian3w) #2
instrukcja kopia

[kopia 1] [kopia 2]

[kopia 1] [kopia 2]

Zrobiona kopia stron jakby za 10 lat linki nie działały i ktoś dalej używał starego office - o ile sama kopia nie padnie, bo braknie finansów na jej utrzymanie.


(sensu) #3

Tylko wydaje mi się, że to co podałeś umożliwia odblokowanie na stałe komórki po uruchomieniu arkusza, a ja chciałbym, aby przy każdej zmianie danej komórki program dawał jakąś informację. Czy jest to wykonalne?


(krystian3w) #4

W sumie tak.

Z libreoffice:

Jeśli ochrona ma dotyczyć tylko zmian w komórkach, nie należy wprowadzać hasła.

Trzeba by sprawdzić czy będzie wyskakiwać komunikat.


Jak nie ma nigdzie tego w Excelu / calcu to by trzeba pewnie użyć skryptu VBA / skrypt do zdarzeń https://help.libreoffice.org/Common/Scripting/pl#Aby_przypisa.C4.87_skrypt_do_zdarzenia


Przykład skryptu VBA do Excela - https://stackoverflow.com/questions/28772036/excel-vba-creating-a-confirmation-prompt-when-a-cell-is-edited - nie wiem na ile gotowiec i jak jest z kompatybilnością z nowszymi wersjami Excel. Opis z poradnika Microsoft - https://support.microsoft.com/en-us/help/213612/how-to-run-a-macro-when-certain-cells-change-in-excel - też do sprawdzenia czy np. zachowuje starsze dane, jakbyś jednak chciał cofnąć.

http://www.excelblog.pl/excel-timestamp-data-zmiany-wkomorce/ - raczej mało wygodne może w skrypcie byłoby lepsze.


(LORDEK) #5

Nie wiem czy Cię coś takiego zainteresuje, ale używam czegoś w ten deseń w swoim arkuszu w pracy. Cały arkusz zablokowany jest hasłem, tylko jedna kolumna ma swobodny dostęp, gdzie komórki są odblokowane. Edycja zablokowanych odbywa się przy pomocy makra. Klikam na interesującą mnie komórkę (dwuklik i edycja nie działa z racji zablokowanego arkusza) i z przycisku, do którego jest podpięte makro, uruchamia się skrypt, który działa w kilku krokach:

  • najpierw wyświetla się Inputbox do wpisania hasła, nawet znalazłem kod, który wpisywany w nim tekst zamienia na gwiazdki (*)
  • skoroszyt jest odblokowywany
  • pojawia się kolejny Inputbox, w którym widać obecną zawartość komórki
  • po zmianie zawartości w inputboxie i kliknięciu “OK” zawartość w komórce się zmienia
  • pozostawienie pustego Inputboxa lub wciśnięcie “ANULUJ” nie zmienia zawartości komórki
  • skoroszyt jest ponownie blokowany

Wygwiazdkowanie nie działa na Excelu 64-bit. Próbowałem wszystkiego no i nie chce działać.

EDIT:

Naskrobałem jeszcze coś takiego

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ODP

If Target.Column = 1 Then

    ODP = MsgBox("Na pewno chcesz zmienić wartość?", vbYesNo + vbQuestion, "EDYCJA")
    If ODP = 6 Then
    Else
        With Application
        .EnableEvents = False
        .Undo
        .EnableEvents = True
        End With
    End If
End If
End Sub

Zapodane makro po zmianie jakiejkolwiek komórki w kolumnie nr 1 pyta czy na pewno chcemy zmienić wartość. Jeżeli nie, to cofa ostatnią zmianę.


(sensu) #6

Widzę, że nie jest to wcale takie proste. Jak znajdę chwilę to na pewno to sprawdzę, ale chyba muszę się wstrzymać ok. tydzień.


(LORDEK) #7

Sposób którego używam w pracy jest banalnie prosty, a makro nie jest skomplikowane choć to wymaga drobnego przygotowania arkusza. Zaznaczasz wszystkie komórki w arkuszu, potem prawoklik-> formatuj komórki->zakładka zabezpieczenia i odznaczasz zablokuj komórki. Następnie wybierasz komórki, które mają być zablokowane i powtarzasz czynność, tyle ze tym razem zaznaczasz opcję “zablokuj komórki”.

By nie szukać kodu włączasz nagrywanie makra, blokujesz arkusz hasłem, następnie odblokowujesz i wyłączasz nagrywanie. Tym sposobem masz gotowy kod na odblokowanie i blokowanie arkusza. Modyfikujesz kod zamieniając odblokowanie i blokowanie miejscami. Przed nimi wstawiasz inputboxa, który pyta o hasło, potem kolejny inputbox, ktory pobiera zawartość zaznaczonej komórki, a wciśnięciu ok pozmienia jej zawartość i blokuje arkusz. Dałbym Ci gotowy kod, ale w domu mam tylko Libre Office, a kod VBA często nie działa jak należy.

EDIT:

Dołączam przykładowy arkusz. Hasło do odblokowania arkusza to “1234”, do wszelkiego rodzaju okienek to “haslo” <- bez polskich znaków

Niebieski przycisk to makro oparte o Inputbox. Akurat nie dałem wygwiazdkowania, ale to nie problem. Drugie to UserForm gdzie hasło wpisujemy w jednym okienku razem z danymi do edycji, wygwiazdkowane.

Zauważ, że makra wykonują się tylko na czerwonych komórkach, które jako jedyne w całym arkuszu są zablokowane.

Zeszyt21.zip (19,3 KB)

BTW. wybacz za taki chaos w skoroszycie, ale to ma być pogląd na działanie kodów. Dopieścić wizualnie itd. można już samemu. Do purystów programowania etc. nie jestem programistą i wszystko wypisuję tak, aby to mnie było wygodnie.


(sensu) #8

Nie rozumiem tych makr, nigdy z nich wcześniej nie korzystałem. Próbowałem coś zrobić, ale nie dałem rady. Patrzyłem co przygotowałeś, ale nic mi tam nie działa, albo coś źle robię (to bardziej prawdopodobne). Byłbyś w stanie napisać mi krok po kroku jak uruchomić to co mi dałeś w Libre Office Calc?


(LORDEK) #9

Jak pisałem kod VBA w Libre Calc może nie działać i raczej nie będzie działać. Na jego widzimi się nie mam rady, bo on totalnie interpretuje komendy po swojemu, a poza tym posiada własne metody na makra. W nim makr nie robię bo kompatybilność tego w MS Excel jest zerowa, a nie spotkałem się by gdziekolwiek ktoś do takich rzeczy wykorzystywał Libre. To tak jakby uczyć się pisania makr drugi raz.


(Dimatheus) #10

Hej,

Jeśli dobrze pamiętam, w LibreOffice’ie makra pisze się w Javie. Na pewno nie są obsługiwane makra w VB.

Pozdrawiam,
Dimatheus


(sensu) #11

No to jest problem, bo miałem nadzieję, że plik będzie działał zarówno na MS i Libre.
Czy w WPS będzie to działać?


(krystian3w) #12

Trzeba by przetestować - http://kingsoftoffice.desk.com/customer/portal/articles/1551904-using-macros-


(LORDEK) #13

Sorry, ale dopiero teraz miałem czas by tam zajrzeć poprzez Libre. W Libre przypisanie makr do przycisków nie działa, trzeba na nowo je przypisać, a to, które używa Userform w ogóle nie chce działać - mam puste okienko. Są dwa makra - edycja i EDY2, działa to pierwsze, ale na nowo trzeba je przypisać do przycisku. Nie wiem tylko czy znowu się nie pokaszani jak odpalisz to w MS Excel, ale zawsze można zrobić dwa odrębne przyciski - jeden do libre, drugi do MS.

Chciałem właśnie zweryfikować to o czym pisał @Dimatheus, bo dobrze pamiętałem, że makra VBA działały również na Libre. Problemem są oczywiście bardziej skomplikowane makra używające bibliotek, windowsowych funkcji etc. i jak widać UserForm.

EDIT:
Kod Userform jest poprawny, ale przyciski nie chcą się pokazać. Wygląda tak, jakby tam były, ale są niewidoczne.


(Dimatheus) #14

Hej,

To dokładnie tak samo jak z polami obliczeniowymi w tabelach przestawnych. :stuck_out_tongue:

Pozdrawiam,
Dimatheus