Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
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 5238 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
    Ethernet jednoparowy (SPE) - rozwiązania w przemyśle. Szkolenie 29.09.2021r. g. 11.00 Zarejestruj się za darmo
  • #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: vb
    Log in, to see the code
  • #5
    oscar64
    Level 2  
    JRV wrote:
    w kodzie arkuszu
    Code: vb
    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 8  
    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 8  
    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 8  
    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 8  
    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 8  
    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 8  
    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 8  
    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 8  
    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 8  
    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 8  
    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 8  
    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 8  
    EKSTRA!!!!!!! DZIĘKUJEEEEEEEEEEEEEEE!!!!!!!!!!!