logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Automatyczna blokada komórki w Excelu po jej edycji

neke 07 Sie 2013 17:12 5217 5
REKLAMA
  • #1 12604507
    neke
    Poziom 9  
    Posty: 37
    Ocena: 2
    Witam,

    Mam mały problem, z którym nie mogę sobie poradzić. Moim celem jest ograniczenie możliwości zmiany wypełnionych komórek w Excelu po zapisie pliku, czyli:
    Otwieram plik, wypełniam kilka pól z zakresu C4 – AF1000, ew. zmieniam wypełnione komórki, zapisuję plik, otwieram go ponownie i już nie mogę zmieniać wcześniej wpisanych komórek.

    Można by przypisywać (poprzez macro odpalane bezpośrednio przed zapisem pliku) edytowanym komórkom właściwość „locked” i w opcjach zabezpieczenia skoroszytu zablokować możliwość zmiany i edycji zablokowanych komórek. Problem w tym tylko, że nie mogę tego napisać w Visualu.

    Będę wdzięczny za pomoc w stworzeniu kodu lub zaproponowaniu innej metody prowadzącej do rozwiązania problemu.

    Pozdrawiam,
    Neke
  • REKLAMA
  • #2 12609704
    neke
    Poziom 9  
    Posty: 37
    Ocena: 2
    Widzę, że problem jest na tyle złożony, iż wysypali się przy nim wszyscy znawcy tematu. Podpowiem zatem jak by ów mógłby wygldać.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Problem w min jest jednak taki, że wysypuje się on przez poniższy fragment:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Zamysł jest taki że program załącza się po wypełnieniu którejkolwiek komórki w zakresie od C3 do G1000, pod warunkiem że w wierszu w którym wprowadzana jest zmiana nie znajdują się już jakiekolwiek dane- ten ostatni warunek opisuje powyżej przytoczony fragment kodu, który jak już napisałem podowuje error.

    Będę wdzięczny za podpowiedź, co jest nie tak.
  • REKLAMA
  • #3 12609745
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Nie w tym rzecz. Wszyscy, łącznie ze mną, zastanawiają się nad tym
    neke napisał:
    Otwieram plik, wypełniam kilka pól z zakresu C4 – AF1000, ew. zmieniam wypełnione komórki, zapisuję plik, otwieram go ponownie i już nie mogę zmieniać wcześniej wpisanych komórek.
    Zapętlij to :)
    Jeśli: -zapisuję plik, otwieram go ponownie i już nie mogę zmieniać wcześniej wpisanych komórek.

    To nie zrobisz: -ew. zmieniam wypełnione komórki

    Najprościej blokować przy Workbook_BeforeClose, dołożyć przycisk z odblokowaniem arkusza na hasło, lub pytać o to przy próbie edycji (Np Selection_Change)

    Update.
    To
    neke napisał:
    Zamysł jest taki że program załącza się po wypełnieniu którejkolwiek komórki w zakresie od C3 do G1000, pod warunkiem że w wierszu w którym wprowadzana jest zmiana nie znajdują się już jakiekolwiek dane- ten ostatni warunek opisuje powyżej przytoczony fragment kodu, który jak już napisałem podowuje error.
    zmienia postać rzeczy. Możesz warunkowo ustawiać właściwość Locked komórek oraz zablokować arkusz przy zamknięciu...
  • REKLAMA
  • #4 12610521
    neke
    Poziom 9  
    Posty: 37
    Ocena: 2
    Ok. Rzeczywiście małe zamieszanie się wdało w moje tłumaczenia. Bijąc się w pierś jedną ręką, wyjaśniam niezwłocznie wszystkie zawiłości ręką drugą.

    Chodzi mianowicie o dwie funkcjonalności:
    1. Po wypełnieniu którejkolwiek z komórek z danego zakresu (C3:F1000), makro przypisuje aktualną datę do drugiej kolumny wiersza, w którym nastąpiła zmiana. Gdy w tym wierszu zostanie wypełniona inna komórka z zadanego zakresu makro się nie uruchomi.

    czyli:
    Z mojego zakresu pustych komórek (C3:F1000) wybieram komórkę C4 i wpisuję do niej wartość. W tym momencie załącza się makro i w komórkę B4 wpisuje dzisiejszą datę. Następnie w komórkę D4 wpisuję również wartość. Makro nie startuje, gdyż w wierszu czwartym, pomiędzy kolumnami D-F znajdowała się już jakaś wartość.

    Poniższe makro spełnia postawione warunki oprócz ostatniego, czyli za każdym razem, gdy jakaś komórka zostanie zmieniona w danym wierszu makro startuje ponownie.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    2. Po wypełnieniu którejkolwiek z komórek z danego zakresu (C3:F1000), makro zmienia parametr locked na true w chwili zapisu pliku.

    czyli:
    Z mojego zakresu pustych komórek (C3:F1000) wybieram komórkę C4 i wpisuję do niej wartość. Do komórki D4 wpisuję również pewną wartość. Następnie przypominam sobie, że w komórce C4 powinna być inna liczba, więc ją zmieniam. Zapisuje plik. Otwieram go ponownie. Próbuję zmienić wpisaną poprzednio do komórki C4 wartość i nie mogę tego uczynić, bo komórka została zablokowana.

    Poniższe makro wysypuje się z powodu błędnie zaadresowanego zakresu jak sądzę.
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #5 12612236
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Przy Workbook_BeforeSave nie ma zmiennej Target...
    Po mojemu powinno być coś takiego
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #6 12614595
    neke
    Poziom 9  
    Posty: 37
    Ocena: 2
    Drogi adamsie_nt,

    kod wygląda rozsądnie, niestety nie działa ;)

    Założyłem hasło "aa" na arkusz (recenzja --> chroń arkusz),
    wstawiłem w kod odpowiednie dane oraz zoptymalizowałem go delikatnie- w odniesieniu do Range (chciałbym by wszystkie komórki z zadanego przedziału były odblokowane, jeżeli nie zawierają wartości). Kod nie działa ani przed moimi zmianami ani po nich.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Bajdełej problem nr 1 udało sie rozwiązać- jak by kto był zainteresowany ;)
    Kod: text
    Zaloguj się, aby zobaczyć kod
REKLAMA