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

EXCEL - monitorowanie komórki, gdy osiągnie określoną wartość

hrabia64 21 Cze 2012 12:57 3015 11
REKLAMA
  • #1 11025848
    hrabia64
    Poziom 12  
    Posty: 166
    Pomógł: 2
    Ocena: 7
    Witam,

    [ Generalnie skrypt działa prawie poprawnie, ale: ]

    Wartości w komórkach A1 i B1 się zmieniają - wpisujemy
    np. w komórkę B1 dowolną wartość i ENTER i wtedy skrypt działa.

    Ale w przypadku pobierania danych z Internetu (dane zewnętrzne)
    skrypt nie działa mimo, że w komórce np. B1 pojawiają się wartości
    większe niż 18 (wartość progowa).

    Czy można skrypt zmodyfikować, aby monitorował dane w komórkach
    (ale bez uderzenia w ENTER)?

    -------------------------------------------------------------
    -------------------------------------------------------------

    Mam prośbę, aby skorygować skrypt - poniżej opisuję jak to działa
    (skrypt jest w "Visual Basic" - w załączniku plik przykładowy):

    [SYNTAX]Private Sub Worksheet_Change(ByVal Target As Range)
    Dim wiersz As Long, kolumna As Long
    If Not Intersect(Target, Range("A1:B4")) Is Nothing Then
    wiersz = Target.Row
    kolumna = Target.Column

    If Range("F" & wiersz) = "-" Then
    If kolumna = 2 And Range("B" & wiersz) >= Range("K1") Then
    Range("F" & wiersz) = Range("B" & wiersz)
    End If
    ElseIf Range("E" & wiersz) = "-" Then
    If kolumna = 1 And Range("A" & wiersz) <= Range("J1") Then
    Range("E" & wiersz) = Range("A" & wiersz)
    End If
    End If
    End If
    End Sub[/SYNTAX]


    [ Objaśnienia ]

    W komórkach A1:A4 oraz B1:B4 zmieniają się wartości liczbowe.

    Założenie jest takie, że monitorujemy komórki B1:B4 do momentu
    gdy wartość liczbowa będzie równa lub większa od liczby wpisanej
    w komórkę "K1" (wartość progowa).

    (Wartość progową sami wpisujemy - jest to zmienna.)

    Wtedy liczba "18" (jak w przykładzie) ląduje w komórce
    w kolumnie "F" (przerywamy monitorowanie danej komórki)
    - od tej chwili monitorujemy odpowiednią komórkę w kolumnie "A"

    Jeśli wartość będzie równa lub mniejsza od liczby wpisanej
    w komórce "J1", wtedy liczba "3" (jak w przykładzie) ląduje
    w komórce w kolumnie "E" (przerywamy monitorowanie komórki
    z kolumny "A")


    [ Dodatkowe objaśnienia ]

    1) wartość progowa J1=3, K1=18

    2) w komórce A1 jest wartość 1, a w komórce B1 jest wartość 5
    (w obu komórkach cały czas zmieniają się liczby)

    3) my skupiamy się na komórce B1 - jeśli wpadnie tam wartość
    równa lub większa od 18, to w komórce F1 pojawia się ta wartość.
    Dopiero wtedy ma być śledzona komórka A1.

    (Dodam tylko, że w komórce A1 może już być wartość 3,
    ale nie ma ona dla nas znaczenia, ponieważ w komórce A1
    musi pojawić się nowa wartość - oczywiście może
    to być np. wartość 3).

    4) Gdy wartość w komórce A1 będzie równa lub mniejsza od 3,
    to wtedy w komórce E1 pojawi się ta wartość.

    5) od momentu, gdy komórki F1 i E1 są wypełnione liczbami 18 i 3,
    skrypt przestaje śledzić obie komórki (A1 i B1).

    Proszę o korektę skryptu.

    Z góry dziękuję. Jan
    Załączniki:
    • przykład_Kaper.xls (33 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 11025908
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 658
    hrabia64 napisał:
    Ale w przypadku pobierania danych z Internetu (dane zewnętrzne)
    skrypt nie działa mimo, że w komórce np. B1 pojawiają się wartości
    większe niż 18 (wartość progowa).
    Możesz to wyjaśnić? Uruchamiana jest jakaś kwerenda (zdarzenie), lub coś podobnego?
  • #3 11025947
    hrabia64
    Poziom 12  
    Posty: 166
    Pomógł: 2
    Ocena: 7
    Jest uruchomiona Kwerenda, pojawiają się w komórce "A1:A4" i "B1:B4" wartości liczbowe. Nie znam się dobrze na Excelu, ale może komenda "copy" (po spełnieniu warunków) załatwiłaby sprawę.

    Pzdr.
  • REKLAMA
  • #4 11025984
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 658
    Ale w załączonym pliku nic nie znalazłem. Jeśli kwerenda "chodzi" w pętli, to nie ma problemu, można w niej wywoływać makro...
  • #6 11026040
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 658
    Tę pętlę trzeba najpierw zmodyfikować, tzn. wywołać w niej makro, w którym dopiero będziemy działać.
  • REKLAMA
  • #8 11027447
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 658
    Twoje makro nie bardzo ma się do założeń, więc raczej nie ma co modyfikować :)

    Trzeba by jakoś zasymulować kwerendę. Zdaje się, że najprościej będzie zadeklarować publicznie Nr wiersza oraz kolumny i zmieniać wartości po osiągnięciu granicznych. Pomyślę i jeśli zdążę przed meczem...

    Dodano przed meczem

    Tak na szybko - zerżnąłem z tego tematu. Pozostało tylko wkomponowanie do pętli z kwerendą. Za to jaka piękna symulacja :)
    Załączniki:
    • przykład_Kaper(1).xls (39 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #9 11028632
    hrabia64
    Poziom 12  
    Posty: 166
    Pomógł: 2
    Ocena: 7
    [ adamas_nt ]

    Jestem pod wrażeniem pięknej symulacji, którą zrobiłeś w Excelu.

    A tak na marginesie dodam, że jesteś chyba moim jedynym ratunkiem.
    Liczę na Twoją cierpliwość i wyrozumiałość.

    W załączniku przygotowałem plik, który będzie tym ostatecznym.
    Zmieniły się tylko miejsca komórek, w których pojawiać się będą liczby (F5:F30 oraz H5:H30). Po namyśle doszedłem do wniosku, że zrezygnujemy z przycisku START/STOP (przepraszam za kłopot).

    Proszę zmodyfikuj skrypt, wytnij symulację i prześlij do mnie - sprawdzę jak to działa w praktyce.

    Na marginesie dodam, że komórki F5:F30 oraz H5:H30 muszą być monitorowane równocześnie (w symulacji zrobiłeś to kolejno liniami).

    Z góry dziękuję i czekam na odzew.

    Pozdrawiam. Jan
    Załączniki:
    • Przykład OK.xls (22 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #10 11031956
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 658
    Jak już pisałem wcześniej: kod dla 'monitorowania' wartości komórek należy wpleść w kod z kwerendą. Nie wiem jak masz to zrealizowane, ale nie bardzo rozumiem co to znaczy "muszą być monitorowane równocześnie".

    Coś tam na uspokojenie (Grecy przegrali z Niemcami) naskrobałem. Może się przyda.
    Załączniki:
    • Przykład OK.xls (44 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #11 11032871
    hrabia64
    Poziom 12  
    Posty: 166
    Pomógł: 2
    Ocena: 7
    Dzięki za przerobiony plik.

    Zrobiłem na początek próbę poprzez wpisywanie ręczne wartości w kolumnie H i F i niestety nie zadziałało (może gdzieś jest drobny błąd) - w kolumnie AR oraz AQ nie pojawiają się liczby.

    Wyjaśnię Ci jak to wygląda z "kwerendą":

    ten plik Excela podpięty jest do innego programu, który wrzuca w komórki H5:H30 i F5:F30 wartości liczbowe (co 0,2 sekundy). Tak więc w naszym arkuszu musimy sobie "wyobrazić" (monitorować), że w kolumnach H i F pojawią się wartości liczbowe i jeśli spełnią warunek to pojawią się w kolumnie AR i AQ.

    Monitorowanie równoczesne - jeśli jako pierwsza pojawi się wartość liczbowa w komórce np. H15 (spełnia warunek), to zostaje ona wrzucona do komórki AR15. Jeśli potem np. w komórce H28, to ląduje ona w AR28 itd. Jak widzisz wartości liczbowe pojawiają się we wszystkich komórkach kolumny H i F równocześnie - skrypt musi wszystkie komórki H5:H30 i F5:F30 mieć "pod kontrolą".

    Od siebie dodam, że w opisie Twojego profilu jest informacja, że przyjmujesz zlecenia (odpłatne). Może będę miał dla Ciebie propozycję zarobkowania w temacie Excela - czy jesteś zainteresowany?

    Ps. sprawdź proszę, gdzie jest błąd w pliku.

    Pozdrawiam. Jan
  • #12 11033973
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 658
    hrabia64 napisał:
    ten plik Excela podpięty jest do innego programu, który wrzuca w komórki H5:H30 i F5:F30 wartości liczbowe (co 0,2 sekundy). Tak więc w naszym arkuszu musimy sobie "wyobrazić" (monitorować), że w kolumnach H i F pojawią się wartości liczbowe i jeśli spełnią warunek to pojawią się w kolumnie AR i AQ.
    Nie rozumiem, czego nie rozumiesz ;) Zamiast kwerendy jest wywołanie makra przez 'OnTime' (w makro kwerendy robisz to wpisując tylko nazwę makra), wewnątrz losowanie (zamiast pobierania). Wyrzuć co niepotrzebne i będzie OK.
    Sprawdzanie liczb musi odbywać się kolejno w pętli, Excel inaczej nie potrafi... Najważniejsze jest to, aby przy starcie obie kolumny (AR, AQ) były wypełnione znakiem "-".

Podsumowanie tematu

✨ Użytkownik poszukuje pomocy w modyfikacji skryptu Visual Basic w Excelu, który monitoruje zmiany w komórkach A1 i B1. Problem polega na tym, że skrypt nie działa, gdy wartości są pobierane z zewnętrznych źródeł, a użytkownik chce, aby monitorowanie odbywało się automatycznie, bez konieczności wprowadzania danych ręcznie (naciśnięcia ENTER). W dyskusji poruszono kwestie związane z kwerendami, pętlami oraz koniecznością równoczesnego monitorowania wartości w komórkach F5:F30 i H5:H30. Uczestnicy sugerują różne podejścia do rozwiązania problemu, w tym wykorzystanie makr oraz symulacji kwerend.
Wygenerowane przez model językowy.
REKLAMA