Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Funkcja Vs operacje na komórkach

korrrro 19 Lip 2012 09:51 2067 6
  • #1 19 Lip 2012 09:51
    korrrro
    Poziom 2  

    Witam,

    Mam problem z operacjami na arkuszu, komórkach z poziomu funkcji. Mam kod, jak poniżej i na koniec, po warunku, chciałbym aby np. dane komórki (aktywna i sąsiednia wyżej) zostały oczyszczone z zawartości lub zmieniły kolor na inny. Niestety formatowanie to nie działa, ale z kolei scalanie komórek już jest rozpoznawane. W czym tkwi szkopuł ?
    Z góry dziękuję za pomoc.

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Załączam przykładowy excell. Np. w kolumnie "2" ma być czyszczona zawartość czy też zmiana koloru komórek F12 i F13. Chcę żeby to odbywało się w funcji, a nie w procedurze i chcę żeby nie było przypisania bezpośrednio do tych komórek tylko żeby można było powielać to na inne.

    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. Post poprawiłem. [adamas_nt]

  • #2 19 Lip 2012 14:49
    adamas_nt
    Moderator Programowanie

    korrrro napisał:
    W czym tkwi szkopuł ?
    Ano w tym, że funkcja zwraca wartość i nie służy formatowaniu komórek (jak wszystkie zresztą funkcje Excela).

    Właściwe w tym przypadku byłoby zastosowanie formatowania warunkowego.

    VBA Funkcja Vs operacje na komórkach

    W przykładzie czcionka i wypełnienie w kolorze blue. Ale po mojemu wystarczyłaby biała czcionka, resztę "robi" funkcja.

  • #3 19 Lip 2012 15:02
    korrrro
    Poziom 2  

    Dzięki za podpowiedź, jednakże...:)
    Piszesz "że funkcja zwraca wartość i nie służy formatowaniu komórek (jak wszystkie zresztą funkcje Excela). " - czemu w takim razie mogę poprzez funkcję scalić komórki ? Jeśli w warunku (w tym samym miejscu, gdzie np kolorowanie nie działa) wstawię:

    Code:
    Range(ActiveCell, ActiveCell.Offset(-1, 0)).Cells.Merge


    wtenczas formatowanie - scalanie komórek działa.

  • #4 19 Lip 2012 15:15
    adamas_nt
    Moderator Programowanie

    No to mnie zaskoczyłeś :) Nigdy nie próbowałem w ten sposób. Czyżby było jakieś rozwiązanie? Trzeba pomyśleć...

    Dodano po chwili

    No tak, z tym że przy scalaniu funkcja jest usuwana. Nie ma funkcji, nie ma zwracania wartości (błędu w tym przypadku), nie ma problemu...

  • #5 19 Lip 2012 15:43
    korrrro
    Poziom 2  

    Faktycznie.
    Jednak czy jest sposób żeby np. kolorowanie komórek zrobić w VBA bez zamiany tej funkcji na procedurę czy absolutnie jest to niemożliwe ?

  • #6 20 Lip 2012 09:36
    korrrro
    Poziom 2  

    Poza tym przy operacji scalania, zanim funkcja zostanie usunięta z komórki to wykonuje polecenie scalania, więc cały czas istnieje podczas wykonywania, dopiero po operacji scalania jest kasowana z komórki, więc to wytłumaczenie nie do końca mi logicznie przemawia...

  • #7 20 Lip 2012 11:09
    adamas_nt
    Moderator Programowanie

    J. Walkenbach, "Excel 2003 Programowanie w VBA", str.265:

    Cytat:
    Czego nie potrafią robić niestandardowe funkcje arkusza
    Opracowując różne funkcje niestandardowe, musisz koniecznie pamiętać o podstawowej różnicy między funkcjami wywoływanymi przez inne funkcje VBA, a funkcjami używanymi w formułach arkusza. Te ostatnie muszą być koniecznie "pasywne". Nie można na przykład umieścić w takiej funkcji kodu wykonującego działanie na zakresie komórek. Spróbuję wyjaśnić to dokładniej.
    Wygodnie byłoby czasem mieć standardową funkcję arkusza zmieniającą formatowanie komórki. Taka funkcja mogłaby na przykład zmieniać kolor liczby w komórce na podstawie jej wartości. Niestety taka funkcja nie jest możliwa do napisania. Bez względu na to, jak byś nie próbował, funkcja taka nie będzie działać. Zapamiętaj: funkcje używane w formułach zwracają wartości - nie wykonują działań na obiektach.

    Cóż, można próbować: Link Ale po mojemu wywołanie (formatowania) funkcji z funkcji, czy procedury Sub z funkcji, zgodnie z cytatem, musi zakończyć się błędem...

    To scalanie wygląda na jakiś niebezpieczny wyjątek. Ba, wyłączając 'DisplayAlerts' można wykorzystać jako "wirus" ;)

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME