Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Excel 2007 - makro warunkowo zdejmujące ochronę komórek

monitor78 07 Sie 2015 13:51 915 14
  • #1 07 Sie 2015 13:51
    monitor78
    Poziom 6  

    Witam,

    proszę o pomoc w następującej sytuacji:

    Zarys ogólny: istnieje chroniony plik gdzie dla każdej kolumny z zakresu należy sprawdzić warunek a następnie po jego spełnieniu zdjąć ochronę wskazanych komórek danej kolumny.

    Szczegóły, dla każdej kolumny z zakresu, arkusz2 załącznika:
    1) sprawdź warunek czy wierszu nr 1 jest słowo "jest", słowo pochodzi z listy wyboru dwóch pozycji z arkusz1,
    2) jeśli warunek spełniony to:
    a) zdejmij ochronę arkusz2,
    b) odznacz ochronę wskazanych komórek danej kolumny (powinna być możliwość ręcznego wprowadzania danych do tych komórek),
    c) ponownie chroń arkusz2,
    3) koniec.

    Załączam przykładowy plik z opisaną wyżej sytuacją. Będę wdzięczny za pomoc.

    0 14
  • Pomocny post
    #2 07 Sie 2015 14:41
    JRV
    Specjalista - VBA, Excel

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    1
  • #3 07 Sie 2015 15:21
    monitor78
    Poziom 6  

    Działa super, dziękuję :)

    Mam jeszcze pytanie o dodatkową modyfikację.

    Powyższe makro wykonuje zadanie po uruchomieniu go manualnie. Czy możliwa jest sytuacja gdy makro jest w trybie "czuwania", tzn. po każdej zmianie warunku w którejkolwiek z kolumn automatycznie odblokowuje komórki, bez uruchamiania manualnego makra po każdej zmianie warunku?

    0
  • Pomocny post
    #4 07 Sie 2015 15:57
    JRV
    Specjalista - VBA, Excel

    Ponieważ zmiana dzieje się na arkuszu Arkusz1, można umieścić w kodzie aktywacyjnym w kodzie Arkusz2

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    1
  • #5 10 Sie 2015 11:15
    monitor78
    Poziom 6  

    Dzięki, pomysł z "Worksheet_Activate" zdał egzamin :)

    Mam jeszcze pytanie czy polecenie

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    (odpowiadające za wybór wierszy) można przekonstruować w taki sposób aby opisać jednocześnie pojedyncze wiersze oraz ich zakresy? Tak aby uniknąć wpisywania pojedynczych wierszy występujących po sobie.

    Na przykład wiersz 15, 28, oraz zakres 55:98?

    0
  • #6 10 Sie 2015 11:45
    JRV
    Specjalista - VBA, Excel

    monitor78 napisał:
    opisać jednocześnie pojedyncze wiersze oraz ich zakresy

    Bardzo w to wątpię. Wieczorem, o tym myśleć.

    Dodano po 3 [minuty]:

    Najlepsze rozwiązanie, moim zdaniem, byłoby zmienić tło takich komórek, gdzie trzeba zmienić ręcznie, aby dostosować makro.

    0
  • #7 10 Sie 2015 12:16
    monitor78
    Poziom 6  

    Rozumiem że wtedy polecenie wybierałoby wiersze danej kolumny na podstawie zgodności unikalnego formatu komórek? Jeśli tak, to ten pomysł raczej nie zadziała ze względu na różne formaty w tabeli docelowej.
    Optymalnie byłoby mieć możliwość wybrania zakresu jak również pojedynczych wierszy. Jeśli ten mechanizm tego nie obsłuży to zawsze można to załatwić wpisami pojedynczymi, nawet jeśli będzie ich dużo. Najważniejsze że działa :)

    0
  • #8 10 Sie 2015 21:22
    JRV
    Specjalista - VBA, Excel

    Kiedy aktywujesz arkusza 2, wierszy i zakresy wierszy(do edytowania) już musi być określony. Jak masz zamiar zapytać tych wierszy? zmieścić się w makro (Array)-nie dość elegancki.

    Dodano po 38 [minuty]:

    Jest to opcja - Kiedy aktywujesz arkusza 2 przy użyciu przycisku 'Ctrl', kursor i przewijania zaznacyc wiersze, gdzie ręczna edycja. Jak na to?

    0
  • #9 10 Sie 2015 21:27
    monitor78
    Poziom 6  

    Jedyny znany mi sposób na wywołanie tych wierszy to wpisanie ich pojedynczo do "array", tak jak podałeś powyżej.
    Dla większej ilości wierszy (np. 50), trzeba je będzie pewnie wpisać oddzielnie.

    edit: tej metody z ctrl, kursor i przewijanie wolałbym nie stosować, arkusze będą wykorzystywać inne osoby które mogą mieć problemy z obsługa plików, nie chcę im dodatkowo utrudniać pracy.
    Jeśli trzeba wpisać wiersze pojedynczo do "array" to tak zrobię. Raz się napracuję przy wpisywaniu ale za to później będzie pełny automat :)

    0
  • Pomocny post
    #10 10 Sie 2015 21:37
    JRV
    Specjalista - VBA, Excel

    Oferują sposób - aktywowany Arkusz 2, ma dialogu, który zaprasza zaznaczyc wierszy do edycji. Następnie Kliknij OK - dziala makro

    Inny sposób zapisz w makro w postaci "1:1 , 5:26, 29:57"
    np.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    1
  • #11 11 Sie 2015 10:32
    monitor78
    Poziom 6  

    Wszystko działa jak trzeba, zakresy pozwalają obsłużyć dużą ilość wierszy, dziękuję za pomoc :)

    Mam jeszcze pytanie: czy można wpleść do powyższego mechanizmu polecenie zmiany wypełnienia koloru wybranych w array komórek?

    Coś w stylu:
    jeśli UCase(.Cells(1, k)) <> "JEST" to wypełnij kolor na biało,
    jeśli inaczej to wypełnij kolor na żółto.

    0
  • #12 11 Sie 2015 12:19
    JRV
    Specjalista - VBA, Excel

    po

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Wpisz
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #13 13 Sie 2015 11:51
    monitor78
    Poziom 6  

    Dziękuję, zmiana koloru działa :)
    Wprowadzałem ostatnio aktualną wersję makra do plików rzeczywistych i mam jeszcze jedno pytanie.
    Polecenie określa zakres kolumn na których operuje fragmentem kodu:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Czy można określić te kolumny indywidualnie, zamiast zakresu od 1 do 11? Tak się składa że w tym zakresie są również kolumny których polecenie nie powinno zmieniać.
    Na przykład wybór kolumn: 1, 4, 9:11?
    Ewentualnie pojedynczo: 1, 4, 9, 10, 11?

    0
  • Pomocny post
    #14 13 Sie 2015 14:05
    -psiak-
    Poziom 32  

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    1
  • #15 18 Sie 2015 11:59
    monitor78
    Poziom 6  

    Udało mi się już wszystko wdrożyć do plików.
    ostatecznie wygląda tak i wszystko śmiga

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Dzięki wszystkim za pomoc :)

    0