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 2000: Jak uruchomić makro po wpisaniu wartości do komórki?

Aztil 17 Sie 2007 18:49 10279 9
REKLAMA
  • #1 4187662
    Aztil
    Poziom 2  
    Posty: 3
    Mam pytanie: czy jest możliwe w Excelu 2000 automatyczne uruchomienie makra po wpisaniu dowolnej wartości do danej komórki?
  • REKLAMA
  • REKLAMA
  • #3 4188003
    Aztil
    Poziom 2  
    Posty: 3
    No chciałbym takie coś zrobić. Znalazłem ten temat, ale nie za bardzo mi to dało. Pisze, że mam takie coś wpisać:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    nrkolumny = 2 'numer kolumny - B=2

    If Target.Column = nrkolumny Then
    MsgBox "Działa!" 'tutaj Twoje Makro
    End If

    End Sub

    Jak to mam odczytać?

    Po prostu mam terminarze piłkarskie i chcę, aby po wpisaniu pełnego wyniku meczu uruchomiło się makro sortujące tabele. Jak dotychczas muszę męczyć się przyciskaniem przycisku, sortującego tabele.
    Sorry, że ja taki lamer, ale ja dopiero staram się poznać większe działanie VBA.
  • REKLAMA
  • #4 4188450
    paweliw
    Spec od komputerów
    Posty: 4914
    Pomógł: 710
    Ocena: 229
    Nie jestem biegły jeśli chodzi o makra ale tak przeglądając parę stron o Excelu natrafiłem na makro uruchamiane przy każdym przeliczeniu arkusza, i uruchamiające kolejne makro pod warunkiem że zmieniły się wartości w pewnych komórkach.

    W Twoim przypadku można by uruchamiać makro sortujące wyniki przy każdym przeliczeniu arkusza (czyli po wpisaniu/usunięciu/zmianie jakiejkolwiek wartości arkusza). Obawiam się jednak, że przy dużych rozmiarach arkusza mogłoby to spowolnić pracę .

    W załączonym arkuszu istnieje proste makro uruchamiane przy każdym przeliczeniu arkusza ale sprawdzające czy wartość komórki C1 zmieniła się, jeżeli tak to uruchamiane jest makro sortowania.

    W arkuszu, po każdym wyniku jest wstawiona funkcja sprawdzająca czy w obu polach wyniku jest liczba (dająca w wyniku 1 lub 0). W komórce C1 zsumowane są wyniki funkcji sprawdzającej.
    Tak więc każde wpisanie wyniku (A1 i B1) spowoduje zmianę wartości w C1 i uruchomi się sortowanie.
    Swoje makro sortujące wpisujesz w treść Makra1.

    Oczywiście makro ma wady (nie reaguje na zmianę wcześniej wpisanego wyniku itp.) ale myślę, że jest to do przejścia.
    Załączniki:
    • Makro_sortowanie.rar (8.36 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #5 4188561
    lelekx
    Poziom 30  
    Posty: 1220
    Pomógł: 158
    Ocena: 90
    Chyba najprościej zdefiniować makro jako funkcję, w jakąś komórkę dodać wywołanie tej funkcji, a argument byłby podawany jako odnośnik do zmienianej przez Ciebie komórki:
    - niech funkcja nazywa sie MyFunction, ma jeden argument
    - zmieniasz zawartość komórki A1
    - w komórce AA1 wpisać '=MyFunction(A1)'

    Taka funkcja będzie wywoływana zawsze po zmianie komórki A1
  • REKLAMA
  • #6 4188662
    paweliw
    Spec od komputerów
    Posty: 4914
    Pomógł: 710
    Ocena: 229
    lelkx :arrow:

    Twój sposób też działa, zamieniłem tylko poprzednią procedurę na funkcję a jej wywołanie wstawiłem w D1.
    Załączniki:
    • Makro_sortowanie1.rar (8.28 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #7 4189982
    Aztil
    Poziom 2  
    Posty: 3
    Wszystko byłoby fajnie, gdyby nie to, że ten komunikat "Sortowanie" mi działa, ale nie chce działać to prawdziwe sortowanie. Podaję przykład:

    Range("M7:V10").Select
    Selection.Sort Key1:=Range("V7"), Order1:=xlDescending, Key2:=Range( _
    "U7"), Order2:=xlDescending, Key3:=Range("R7"), Order3:=xlDescending, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

    To jest tylko mała część tych sortowań, bo tych tabel mam dużo. No i jak taki kod tam wsadzić, żeby mi działał tak jak ten komunikat.
  • #8 4191785
    paweliw
    Spec od komputerów
    Posty: 4914
    Pomógł: 710
    Ocena: 229
    Podmień wywołanie makra Makro1 (przykładowe makro "sortowanie") na wywołanie Twojego makra.
    Skoro:
    Aztil napisał:
    Jak dotychczas muszę męczyć się przyciskaniem przycisku, sortującego tabele.

    to rozumiem, że makro masz więc podmiana samego wywołania (call Makro1) nie powinno stanowić problemu.
  • #9 5762807
    freewolf
    Poziom 1  
    Posty: 1
    Przepraszam, że odświeżam tak stary temat ale mam podobny problem, a zasugerowane w wątku rozwiązanie nie jest skuteczne.
    Chodzi mi o to, że mam zakres danych, który chciałbym podawać do makra parametrem (makro umieszczone w komórce nad zakresem), a makro miałoby sortować zakres za każdym razem gdy ktoś wprowadzi do niego dane. Makro postaci:

    Function sortowaniedat(zakres As Range)
    
            zakres.Sort Key1:=zakres.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
            DataOption1:=xlSortNormal
    
    End Function


    Uruchamia się ale nie sortuje.
  • #10 8514258
    jacek-ie
    Poziom 10  
    Posty: 5
    Witajcie,

    również odświeżę temat, zacznę od początku, byście mieli jasność ...

    Mam pewien zakres liczb, które zbieram do jednej kolumny kolejno w dół od wiersza 7 do 150. Nazwijmy ją kolumna I. Zakres liczb zawiera się od 0 do 50.

    Następnie w kolumnie A mam zrobioną formułę sprawdzającą mi ilość występowania każdej z liczb w tym zakresie. Dotąd wszystko ok, Następnie robię odwołanie w kolumnie N do tejże kolumny A (kopiuję dane i formuły) oraz kolejne odwołanie w kolumnie O do kolumny B, w któej znajduje się zestawienie liczb kolejno od 0 do 50.

    Gdy dopiszę kolejną liczbę z kolumnie I, od razu jest to wykrywane w kolumnie A oraz N i wszystko ładnie działa. Zmierzam do tego, że potrzebuję teraz posortować kolumnę N w kolejności malejącej tak, by od razu po wpisaniu nowej liczby w kolumnie I następowało automatyczne sortowanie kolumny N.

    Niestety moja znajomość Excela jest niewystaczająca, by tego dokonać. Próbowałem zapisać makro, które by mi to sortowało, ale niestety zgłasza błąd : Invalid use of property.

    Kod makro wyglada tak :

    Sub Makro2()
    '
    ' Makro2 Makro
    ' Makro zarejestrowane 2010-09-15, autor Użytkownik
    '

    '
    Range& VB_VarUserMemIdN3: O39VB_VarUserMemId '+Select
    Selection+Sort Key1 .<= Range&VB_VarUserMemIdN3VB_VarUserMemId'VB_VarProcData _
    Order1 .<= xlDescendingVB_VarProcData Header .<= xlGuessVB_VarProcData _
    OrderCustom .<= 1VB_VarProcData MatchCase .<= FALSEVB_VarProcData Orientation . _
    <= xlTopToBottomVB_VarProcData DataOption1 .<= xlSortNormal
    End Sub

    Jeżeli zaznaczę wymagany zakres ręcznie i wcisnę guzik Sortuj Z do A to działa bez błędu. Możecie wskazać mi co jest nie tak i jak to poprawic ??

    Dziękuję i pozdrawiam,

    Jacek

Podsumowanie tematu

✨ Dyskusja dotyczy możliwości automatycznego uruchamiania makra w Excelu 2000 po wpisaniu wartości do określonej komórki. Proponowane rozwiązania obejmują wykorzystanie zdarzenia Worksheet_SelectionChange, jednak jest ono wywoływane przy zmianie zaznaczenia, a nie wartości komórki. Alternatywnie sugerowano użycie makra uruchamianego przy każdym przeliczeniu arkusza (Worksheet_Calculate), które sprawdza zmianę wartości w monitorowanej komórce i wtedy wywołuje makro sortujące. Wskazano, że takie podejście może spowolnić działanie arkusza przy dużych danych. Zaproponowano także implementację funkcji VBA wywoływanej w komórce arkusza, która reaguje na zmianę innej komórki, jednak funkcje nie mogą bezpośrednio modyfikować arkusza, co ogranicza ich zastosowanie do sortowania. Wątpliwości pojawiły się przy implementacji faktycznego sortowania w makrze, gdzie kod sortowania zakresu (np. Range("M7:V10").Sort) nie działał poprawnie w kontekście wywołania z funkcji. Ostatecznie zalecano wywołanie istniejącego makra sortującego z poziomu zdarzenia Worksheet_Calculate po wykryciu zmiany wartości w określonej komórce. W dyskusji pojawiły się przykłady kodów VBA oraz opis problemów z przekazywaniem zakresów jako parametrów do funkcji sortujących.
Wygenerowane przez model językowy.
REKLAMA