Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Blokowanie warunkowe VBA - Blokowanie komórek po spełnionym warunku

oscar64 10 Feb 2017 09:53 5937 28
  • #1
    oscar64
    Level 2  
    Witam,

    Chciałbym ustawić w pliku Excel najlepiej przy pomocy VBA kodu.

    Działanie:
    Jeżeli komórka A1 ma wartość 0 to następuje zablokowanie komórek B1 i C1
    Jeżeli komórka A1 ma wartość inną niż 0 to jest możliwość edycji komórek B1 i C1

    Chciałbym też aby taki kod miał również na uwadze to iż podczas zmiany wartości w komórce A1 powinien usunąć dane z B1 i C1

    Mam nadzieje że wyjaśnienie jest dość jasne.
    Dziękuje z góry za pomoc.

    Marcin
  • #2
    JRV
    VBA, Excel specialist
    oscar64 wrote:
    podczas zmiany wartości w komórce A1

    na wartość 0 oraz na wartość inną niż 0
    lub tylko na wartość 0 ?
  • #3
    oscar64
    Level 2  
    JRV wrote:
    oscar64 wrote:
    podczas zmiany wartości w komórce A1

    na wartość 0 oraz na wartość inną niż 0
    lub tylko na wartość 0 ?


    Na wartość 0 oraz na wartość inną niż 0.
  • Helpful post
    #4
    JRV
    VBA, Excel specialist
    w kodzie arkuszu
    Code: vbscript
    Log in, to see the code
  • #5
    oscar64
    Level 2  
    JRV wrote:
    w kodzie arkuszu
    Code: vbscript
    Log in, to see the code


    Dzięki działa!!!

    Mam dodatkowe pytanie:
    Załóżmy że w komórce pojawia się wartość "1" chciałbym zablokować możliwość edycji B1 i C1.
    Jak to zapisać w kodzie?

    Pozdro
    Marcin
  • #6
    JRV
    VBA, Excel specialist
    .Locked = Target Like "[0-1]"

    Dodano po 47 [sekundy]:

    blokowanie 0 lub 1
  • #7
    wiewiora1521
    Level 9  
    A co jeśli, ktoś edytuje już wprowadzoną komórkę? Przy tym kodzie nie jest możliwe, zanim się nie odznaczy nie chroń arkusza. Czy da się jakoś wpisać to w kod? Mam na myśli, że jeśli ktoś zaznaczy 0- to w kolejnej kolumnie nie może nic wpisać, ale jeśli stwierdzi, że chce zmienić to 0 na coś innego to już nie może w tym samym wierszu zrobić poprawki
  • #8
    JRV
    VBA, Excel specialist
    wiewiora1521 wrote:
    ktoś edytuje już wprowadzoną komórkę
    w ktorej kolumnie? A?
    zablokowac je
    With Target.Offset(, 1).Resize(, 2)
    zastap
    With Target.Resize(, 3)
  • #9
    wiewiora1521
    Level 9  
    a w zasadzie działa jak należy, ale tylko dla 2 pierwszych wierszy w kolumnie A...nie wiem dlaczego póżniej od 3 już nie można nic wprowadzić, najchętniej dołączyłabym plik testowy. Bardzo proszę o pomoc
  • #10
    JRV
    VBA, Excel specialist
    wiewiora1521 wrote:
    dołączyłabym plik testowy

    czekame
  • #11
    wiewiora1521
    Level 9  
    Niestety nie działa (test4), spróbowałam na kolejnym nowym pliku excela. Dodałam kod w vba. I po 1) po wprowadzeniu już wartości w kolumnie A jakieś wartości, zostaje zablowana możliwość edycji i tej komórki i pozostałych komórek całego arkusza. Potrzebuje zablokować komórkę sąsiadująca tylko w przypadku wartości "nie" lub pustej. Jeśli ktoś wpisuje tak lub z "nie" przechodzi na "tak" powinna być możliwość edycji sąsiedniej komórki. Nie powinno to też blokować edycji pozostałych komórek całego arkusza.


    Co ciekawe, w pliku test, który w zasadzie kod ma prawie ten sam działa do 2 wierszy
  • #12
    JRV
    VBA, Excel specialist
    Najpierw trzeba bylo zaznaczyc kolumny A : D, nastepnie w formacie komorek odptaczkowac 'ochrona'
  • #13
    wiewiora1521
    Level 9  
    Nie do końca rozumiem. Zanim dodam makro mam zaznaczyć całą kolumne A? Tak właśnie przetestowałam i nie zmienia mi to nic...
  • #14
    JRV
    VBA, Excel specialist
    Me.Protect - to jest ochrona calego arkusza. Domyslnie wszystkie komorki jest 'Locked'
    Ze mozliwosc edytowac warunkowo - pred tym caly zakres A do D(kolumny) w menu Format -Komorki nalezy odptaczkowac "Ochrona"
  • #15
    wiewiora1521
    Level 9  
    Ok. a więc teraz jak już się da wpisywać w kolejnych wierszach kolumny A, to niestety nie blokuje komórki sąsiadującej, gdy w komórce z kolumny A wpisuje "nie". Kasuje tylko, jeśli wprowadzone było najpierw tak a potem zedytowane na nie

    Zanim wprowadziłam makro, zaznaczyłam komórki i zaznaczyłam w formacie w ochronie wedle zaleceń a w samym makro usunęłam unprotect i me protect
  • #16
    wiewiora1521
    Level 9  
    OK DZIAŁA! Rozumiem już teraz! Pytanie jeszcze 1, co jeśli chciałabymw tym arkuszu powtórzyć ten kod dla kilku kolumn tzn. żeby działało to dla kolumny A w powiązaniu z B i np. też dla kolumny G w powiązaniu z H...?
  • #17
    JRV
    VBA, Excel specialist
    If Not Application.Intersect(Union(Columns(1), Columns(7)), Target) Is Nothing Then

    Dodano po 3 [minuty]:

    wiewiora1521 wrote:
    samym makro usunęłam unprotect i me protect
    Musi byc
  • #18
    wiewiora1521
    Level 9  
    Kod taki powoduje, ze jeśli wybiore "nie" w kolumnie A, to już nie mogę nic wybrac w kolumnie G...Pytanie, czy da się ten kod zastosować tak, że B zależy od A a H nie zależy od A też, ale wyłącznie od G?
  • #20
    JRV
    VBA, Excel specialist
    "nie" powinny być małymi literami
    Zapomnialas odptaczkowac ochrone komorek w kolumnach G i H
  • #21
    wiewiora1521
    Level 9  
    Zanim wkleja się kod odblokowuje się ochronę dla tych kolumn, których dotyczą te operacje, ale pomiędzy niestety są też zablokowane komórki (Twój plik tez to pokazuje kolumny od D-F) ,a w których też powinno niezależnie móc wprowadzać się wartości...No a z kolei zanim wprowadzę kod zaznacze całą tabelę to niestety wyskakuje ta zależność od kolumny A- która też jest nieprawidlowa...

    Dodano po 11 [minuty]:

    Może ja załącze plik, bo tak są 2 ważne dla mnie rzeczy. Będe mieć kolumny te właśnie zależne, przypuśmy D od C, H od G, co nie powinno blokować wpisywania wartości do pozostałych kolumn, a ponadto jak się wpisze w kolumnie I liczbę wiekszą od 1 powinno dodać wiersze i skopiować treść do tych dodanych wierszy z wszystkich kolumn do I z wiersza oryginalnego, co też niestety mi nie działa, gdy próbuje połączyć obie te funkcję razem w 1 arkuszu...
  • #22
    JRV
    VBA, Excel specialist
    wiewiora1521 wrote:
    kolumny od D-F ... w których też powinno niezależnie móc wprowadzać się wartości
    Wczesniej o to nie chodzilo...
    B i C zalezy od A; H i I zalezy od G
    takie bylo zagadnenie:
    cytat:
    " żeby działało to dla kolumny A w powiązaniu z B i np. też dla kolumny G w powiązaniu z H...?
    "
  • #23
    wiewiora1521
    Level 9  
    Nie ma znaczenia, mogę dać to, że B zalezy od A, a H zalezy od G- nie może być jednak sytuacji, że blokuje mi możliwość uzupełniania wartości do kolumn, które od tego nie zależą. Pokazuje to plik od Ciebie, ale również ten- komórki pomiędzy są zablokowane :/
  • #24
    JRV
    VBA, Excel specialist
    zaznacz wszystkie komorki i odptaczkuj "chroniona komorka"

    Dodano po 1 [minuty]:

    JRV wrote:
    Me.Protect - to jest ochrona calego arkusza. Domyslnie wszystkie komorki jest 'Locked'
  • #25
    wiewiora1521
    Level 9  
    Ok, rozwikłałam zagadkę. Zaznaczam całą tabelę i działa jednak poza funkcją kopiowania wierszy przy wstawianiu, gdy łączę 2 te funkcję- nie wiem czy w tej kwestii jesteś w stanie pomóc?
  • #26
    JRV
    VBA, Excel specialist
    v stanie, jak jest jasnosc
    wiewiora1521 wrote:
    powinno dodać wiersze
    -gdzie? ile?
    wiewiora1521 wrote:
    z wiersza oryginalnego
    co jest oryginalny, numer wirsza?
  • #27
    wiewiora1521
    Level 9  
    On Error Resume Next
    w = Target.Row
    k = Target.Column
    If k = 10 Then
    If Target.Value > 1 Then
    a = w + 1
    b = a + Target.Value - 2
    Rows(a & ":" & b).Select
    Selection.Insert Shift:=xlUp, CopyOrigin:=xlFormatFromLeftOrAbove
    Rows(w & ":" & w).Select
    Selection.Copy
    Rows(a & ":" & b).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    MsgBox "Uzupełnij osobno w poniższych wierszach w kolumnie H i I nazwę bla bla bla"
    End If
    End If


    Taki mam kod i on mi działa bez połaczenia w pełni, to znaczy, że jesli ktoś w kolumnie 10 w wierszu wpisze np. 3, to doda mi 2 dodatkowe wiersze pod. W teorii powinno mi skopiowac do nowych wierszy dodanych wartości z wiersza, w których wprowadzono cyfrę 3 wartości do kolumny 9 włącznie, ale w połączeniu z funkcją warunkowego blokowania komórek działa dodawanie wierszy, wyświetlanie monitu informacji, ale już nie kopiowanie
  • #28
    JRV
    VBA, Excel specialist
    poniewaz "insert' to jest to samo 'Worksheet_Change'
    Trzeba przed 'Insert - Copy - Paste' tj. przed 'Selection.Insert '
    wstaw
    Application.EnableEvents = False
    I po
    Application.CutCopyMode = False
    wstaw
    Application.EnableEvents = True
  • #29
    wiewiora1521
    Level 9  
    EKSTRA!!!!!!! DZIĘKUJEEEEEEEEEEEEEEE!!!!!!!!!!!