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

Automatyczne ukrywanie wierszy w EXCEL za pomocą kodu VBA

jahol 02 Gru 2020 09:02 2016 5
REKLAMA
  • #1 19083830
    jahol
    Poziom 2  
    Posty: 4
    Cześć, mam problem którego nie potrafię rozwiązać, może jest mi ktoś w stanie pomóc.
    Mianowicie potrzebuje wykonać w swoim Arkuszu w Excelu automatyczne ukrywanie pustych wierszy, gdzie wartość w danej komórce jest mniejsza niż 1.

    Korzystam z takiego kodu VBA:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "E23" Then
    If Target.Value < 1 Then
    Rows("25:28").EntireRow.Hidden = True
    Else
    Rows("25:28").EntireRow.Hidden = False
    End If
    ElseIf Target.Address(0, 0) = "E23:D23" Then
    End If
    End Sub


    Działa elegancko ale tylko wtedy gdy mam wpisaną wartość ręcznie, ale wartości są wynikiem funkcji JEŻELI. i w takim przypadku niestety nie. Zna ktoś rozwiązanie problemu? Może trzeba skorzystać z innej funkcji Target.* ?
  • REKLAMA
  • #2 19084478
    Prot
    Poziom 38  
    Posty: 2580
    Pomógł: 574
    Ocena: 297
    jahol napisał:
    Może trzeba skorzystać z innej funkcji Target.* ?

    Musisz trochę poczytać n/t VBA szczególnie o procedurach zdarzeniowych :!: :D
    Przy zdarzeniach typu Change wywoływana jest automatycznie procedura w momencie zmiany stanu (tj. wartości) w określonym zakresie komórek (ten zakres określony jest zgodnie z definicją mianem Target).

    Jeśli chcesz wykorzystać koniecznie procedurą zdarzeniową :?: to moim zdaniem (na podstawie lakonicznego opisu :cry: ) musisz wykorzystać inne zdarzenie np. SelectionChange lub Activate i przemyśleć dokładnie co, kiedy i gdzie będzie tą procedurę wywoływać :D

    Załącz przykładowy plik na forum to będzie można Ci coś poradzić.
  • REKLAMA
  • #3 19084657
    PRL
    Poziom 41  
    Posty: 6941
    Pomógł: 953
    Ocena: 905
    Cytat:
    ale wartości są wynikiem funkcji JEŻELI...

    ... a funkcja Jeżeli oblicza w momencie, gdy co?
    I w ten moment wbij się z kodem ukrywania.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #4 19085019
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    Prot napisał:
    Musisz trochę poczytać n/t VBA szczególnie o procedurach zdarzeniowych
    Przy zdarzeniach typu Change wywoływana jest automatycznie procedura w momencie zmiany stanu (tj. wartości)

    Bardziej chodzi tu, przez co te zmiany się dokonały niż o samą zmianę, bo u @jahol zmiana wartości się dokonała przez funkcję.
    https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet.change
  • REKLAMA
  • #5 19095794
    jahol
    Poziom 2  
    Posty: 4
    Dziękuje bardzo za zainteresowanie tematem. Próbowałem jeszcze raz sam coś zdziałać na podstawie waszych sugestii ale poległem. Przesyłam w załączeniu arkusz z problemem.

    Sposób działania arkusza przedstawia się następująco:
    W zakładce DANE wklejany jest wiersz z innego pliku, w którym są wprowadzane pewne wartości na Stanowiskach nr 1-7. Jeżeli nie ma wartości na danych stanowiskach to komórki są puste.
    Na samym dole w wierszach 38:44 jest zagnieżdżona formuła JEŻELI w tym celu, że jak na którymś stanowisku jest brak wartości to prezentacja stanowisk jest jedna po drugim (bez pozostawiania pustych wierszy).

    W zakładce DRUK stanowiska i wartości są prezentowane w wierszach 2:8 i problem polega na tym, żeby znaleźć sposób na ukrycie wierszy, które pozostają puste.

    Próbowałem to zrobić za pomocą takiego kodu VBA:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "K2" Then
    If Target.Value < 1 Then
    Rows("2:2").EntireRow.Hidden = True
    Else
    Rows("2:2").EntireRow.Hidden = False
    End If
    ElseIf Target.Address(0, 0) = "K2" Then
    End If
    End Sub

    Ale nawet jak pola są puste to de facto nie są po zawierają odnośnik "=DANE!G38" itp.
    Kod zastosowałem póki co testowo w komórce K2 i działa jedynie wtedy jak wpisze wartość 0 ręcznie ale potrzebuję, żeby działało to z automatu.
    Bardzo dziękuję z góry za wszelkie sugestie!

    kopia.xlsx (20.27 kB)Musisz być zalogowany, aby pobrać ten załącznik.
REKLAMA