DATA | SNIADANIE | OBIAD | PODWIECZOREK | KOLACJA |
2007-11-01 | kanapki | placki ziemn | lody z owocami| bigos |
2007-11-02 | owsianka | bigos | budyn czekol. |salatka grecka|
2007-11-03 |rog. z miodem| spaghetti | truskawki |kanapki |
gdzie wiersze oznaczające weekendy mają kolor komórek czerwony
(oczywiście podana przeze mnie zawartość tabeli jest fikcyjna).
Pewne wartości powtarzają się w różnych miejscach a ja potrzebowałabym za
pomocą jednej funkcji zaznaczyć np wszystkie komórki zawierające "bigos" na
zielono (nie stosując żmudnego kopiowania i wklejania do Edycja->Znajdź).
Udało mi się napisać takie makro, kopiujące dowolną komórkę i znajdującą w
całej bazie komórki z taką wartością i zamieniające kolor komórki na zielony.
Makro działa super ale potrzebuję jeszcze funkcję odwracającą ów proces (by
podświetlenie komórki odbywało się tylko na chwilę i by arkusz wracał do
poprzedniego stanu-wykluczone jest zamykanie arkusza bez zapisywania zmian,
potrzebuję to zrobić za pomocą skrótu klawiaturowego).
Jak wiadomo, makra nie można cofnąć, można napisać jedynie procedurę odwrotną
do makra zmieniającego. Nie byłoby problemu, gdyby wszystkie komórki w arkuszu
miały przed zmianą ten sam kolor-wtedy można zrobić makro "wyszukaj wszystkie
komórki o kolorze zielonym i zamień kolor na brak koloru". Niestety wszystko
rozbija się o to, że wiersze z dniami weekendowymi zaznaczone są kolorem
czerwonym i moje makro wyszukawszy np. "bigos" na niedzielny obiad, zaznaczy go
na zielono, ale gdybym zrobiła drugie makro usuwające kolor, to komórka po
zmianie miałaby kolor "brak koloru" a przed zmianą była czerwona.
Próbowałam zapamiętać w makrze "wyszukaj" kolor aktywnej komórki ( starykolor =
ActiveCell.Interior.ColorIndex) jednak przy zastosowaniu w makro "odznacz"
wartości starykolor, kompilator wyrzuca błąd.
Proszę o pomoc bo już mi ręce opadają, prawdopodobnie jest to proste i zajmie
kilka minut, ale nie mogę na to wpaść.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
--
Archiwum grupy: http://niusy.onet.pl/pl.comp.lang.vbasic
Pozdrawiam.
Application.OnUndo "Ostatnie Makro", "Bigos" 'to ostatnie to nazwa Twojego
makra.
Aby móc zrealizować to z opóźnieniem proponuje zastosować coś takiego:
Application.OnTime Now+TimeValue("00:00:15") 'Następna linijka zostanie
uruchomiona po '15 sek
Application.OnUndo "Ostatnie Makro", "Bigos" 'to ostatnie to nazwa Twojego
makra.
Powinno zadziałać, chociaż nie sprawdzone, bo pisane z ręki.
Pozdrawiam
Sub zaznacz()
'
' zaznacz Makro
' Makro zarejestrowane 2007-11-04, autor ghia
'
' Klawisz skrótu: Ctrl+w
'
Selection.Copy
With Application.ReplaceFormat.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
Cells.Replace What:=ActiveCell.Value, Replacement:="", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=True
End Sub
"Bigos" może wystąpić na poniedziałkowy obiad, piątkową kolację lub niedzielne
śniadanie (przykładowo). Moje makro wyszukuje komórki o wartości takiej, jak
komórka na której właśnie znajduje się zaznaczenie. Jeśli zaznaczenie (kursor?)
jest na "bigosie" to po kliknięciu Ctrl+w zaznaczy mi wszystkie bigosy w całej
bazie na zielono. Jeśli zaznaczenie jest na "kanapkach" to zaznaczy mi
wszystkie kanapki w całej bazie. Dlatego nie mogę określić, że zmiany będą się
odbywać tylko w kol. B lub C
Proponuję to zrobić bez angażowania VBA, bo tak będzie znacznie prościej.
Szukaną wartość wpisuj do jakiejś komórki w arkuszu (może być też w jakimś
innym arkuszu alternatywnie jako nazwany zakres danych). Przypuśmy, że jest
komórka G1 w tym arkuszu.
Zaznacz komórkę A1 i naciśnij Ctrl+A, aby zaznaczyć wszystkie komórki w
arkuszu (ważne aby komórka A1 była komórka aktywną). Wybierz menu Format ->
Formatowanie warunkowe. Po lewej stronie zamiast "Wartośc komórki jest"
wybierz "Formuła jest" i obok wpisz taką formułę:
=ORAZ(A1<>"";A1=$G$1)
Naciśnij przycisk Formatuj, aby odpowiednio ustawić kolor zielony
wypełnienia i naciśnij OK.
Teraz wpisz do komórki G1 szukany tekst i na zielono zostaną zaznaczone
wszystkie komórki zawierające ten tekst. Jeśli wyczyścisz tą komórkę, to
wszystko wróci do stanu poprzedniego.
--
Pozdrowienia
pxd74
Najprościej i najlepiej wykorzystać w tym celu właśnie formatowanie
warunkowe. W przypadku innych rozwiązań kod będzie bardzo długi i
niepotrzebnie skomplikowany.
Jeśli nie możesz/nie chcesz przechowywać danej wartości w jakieś komórce, to
wykorzystaj nazwy.
Wybierz polecenie menu Wstaw -> Nazwy -> Definiuj. W polu "Nazwy w
skoroszycie wpisz jakąś nazwę nie zawierającą spacji, np.: MojaNazwa, a w
polu "Odwołuje się do" wpisz:
=""
Naciśnij przycisk Dodaj, a następnie zamknij okno dialogowe "Definiowanie
nazw".
W dalszym kroku dodaj formatowanie warunkowe jak napisałem wcześniej
zmieniając tylko formułę na następującą:
=ORAZ(A1<>"";A1=MojaNazwa)
Dwa makra: zmieniające podświeltenie i usuwające będą wyglądały w ten
sposób:
Sub Zmień()
ActiveWorkbook.Names("MojaNazwa").Value = ActiveCell.Value
End Sub
Sub Wyczyść()
ActiveWorkbook.Names("MojaNazwa").Value = "="""""
End Sub
Zauważ ponadto, że nazwę możesz ukryć poprzez VBA uruchamiając taki kod:
ActiveWorkbook.Names("MojaNazwa").Visible = False
Nie będzie ona wtedy widczna w oknie "Definiowanie nazwy"
--
Pozdrowienia
pxd74
P.S. Makro odznaczające działa chyba prawidłowo, w każdym razie odznacza
zaznaczoną wcześniej na zielono komórkę H12.
perfetka
Czy przed uruchomieniem makra Zmień masz zaznaczoną pojedynczą komórkę,
która nie zawiera wpisu "owsianka", a mimo to zaznaczana jest "owsianka" w
komórce H12?
Poza tym potrzebuję też takiej informacji:
Zaznacz komórkę, powiedzmy D1, wybierz menu Format -> Formatowanie
warunkowe, a następnie skopiuj i wklej do swojego postu formułę z
formatowania warunkowego. Wybierz też menu Wstaw -> Nazwa -> Definiuj,
zaznacz nazwę "MojaNazwa" i wklej tutaj zawartość pola "Odwołuje się do".
Możesz też przesłać mi na priva przykład.
--
Pozdrowienia
pxd74
Pracuję jeszcze nad położeniem kursora-po kasowaniu zawartości G1 kursor
niestety tam zostaje a ja chcąc zaznaczać inne komórki muszę "jechać" przez
cały arkusz, który zawiera kilkaset linijek... Ale myślę, że z tym sobie już
poradzę.
Jeszcze raz ogromne dzięki!
Pozdrawiam
perfetka
No, ale nie napisałaś, że ktoś może mieć zaznczoną pustą komórkę przed
uruchomieniem makra :P
Można zmienić makro Zmień w ten sposób, aby się przed tym zabezpieczyć:
Sub Zmień()
If ActiveCell.Value = "" Then
MsgBox "Zaznaczyłeś pustą komórkę", vbCritical
Else
ActiveWorkbook.Names("MojaNazwa").Value = ActiveCell.Value
End If
End Sub
> Pracuję jeszcze nad położeniem kursora-po kasowaniu zawartości G1 kursor
> niestety tam zostaje a ja chcąc zaznaczać inne komórki muszę "jechać"
> przez cały arkusz, który zawiera kilkaset linijek... Ale myślę, że z
> tym sobie już poradzę.
Kod powienien wyglądać w ten sposób:
Sub Zmień()
ActiveSheet.Range("G1") = ActiveCell.Value
End Sub
Sub Wyczyść()
ActiveSheet.Range("G1").ClearContents
End Sub
--
Pozdrowienia
pxd74
On 13/11/2007 20:49, in article fhd2ln$dmh$1...@inews.gazeta.pl, "pxd74"
<px...@poczta.onet.pl> wrote:
Ciach
Wybierz menu Format ->
> Formatowanie warunkowe. Po lewej stronie zamiast "Wartośc komórki jest"
> wybierz "Formuła jest" i obok wpisz taką formułę:
> =ORAZ(A1<>"";A1=$G$1)
> Naciśnij przycisk Formatuj, aby odpowiednio ustawić kolor zielony
> wypełnienia i naciśnij OK.
>
> Teraz wpisz do komórki G1 szukany tekst i na zielono zostaną zaznaczone
> wszystkie komórki zawierające ten tekst. Jeśli wyczyścisz tą komórkę, to
> wszystko wróci do stanu poprzedniego.
Hej, pracuje nad podobnym formatowaniem warunkowym.
Jest to timesheet, co tydzien macro generuje liste kilkunastu pracownikow:
czyli: Numer + Nazwisko + DAY lub Night w jednej samej komorce
Jak ponizej:
Monday |Tuesday |Wednesday |etc
1. ktos Night |1. ktos Night |1. ktos Day
2. ktos Night |2. ktos Day |3. ktos Day
4. ktos Day |4. ktos Day |4. ktos Day
5. ktos Night |5. ktos Night |5. ktos Night
6. ktos Night |6. ktos Day |6. ktos Day
7. ktos Day |7. ktos Day |7. ktos Night
8. ktos Day |8. ktos Night |8. ktos Day
9. ktos Night |9. ktos Day |9. ktos Day
10. ktos Night |10. ktos Day |10. ktos Night
Potrzebuje w calym wygenerowanym arkuszu zaznaczyc wszystkie komorki w
ktorych wystepuje slowo Day na niebiesko a ze slowem Nigh na czerwono.
Probowalem samo formatowanie warunkowe, bylo by proste gdyby komorka
zawierala samo slowo daya nie zmienny numer spacja zmienne nazwisko day lub
night. Z gory dziekuje za pomoc
p.s dodam tylko ze nie znam, nigdy nie widzialem polskiego excela, formuly
po polsku dla mnie nie zrozumiale
>Potrzebuje w calym wygenerowanym arkuszu zaznaczyc wszystkie komorki w
>ktorych wystepuje slowo Day na niebiesko a ze slowem Nigh na czerwono.
>Probowalem samo formatowanie warunkowe, bylo by proste gdyby komorka
>zawierala samo slowo daya nie zmienny numer spacja zmienne nazwisko day lub
>night. Z gory dziekuje za pomoc
>p.s dodam tylko ze nie znam, nigdy nie widzialem polskiego excela, formuly
>po polsku dla mnie nie zrozumiale
Wymyslilem cos takiego : formatowanie warunkowe : formula:
=LEN(TRIM(A1))-LEN(SUBSTITUTE(A1,"Night",""))>0
Tylko to mi zaznacza komorki z night only - a chcialbym by od razu night
byly zaznaczone na czerono a day na niebiesko i nie tylko dla A, a dla
calego arkusza - pls jakies pomysly? Lepiej macro tylko od czego zaczac?
pozdrawiam
> Potrzebuje w calym wygenerowanym arkuszu zaznaczyc wszystkie komorki w
> ktorych wystepuje slowo Day na niebiesko a ze slowem Nigh na czerwono.
>
> Probowalem samo formatowanie warunkowe, bylo by proste gdyby komorka
> zawierala samo slowo daya nie zmienny numer spacja zmienne nazwisko day
> lub night. Z gory dziekuje za pomoc
Ja bym zaznaczył komórkę A1 a następnie Ctrl+A, aby zaznaczyć wszystkie
pozostałe komórki (ważne aby komórka A1 była komórą aktywną). Nasepnie
uruchomiłbym formatowanie warunkowe i użył do jednego warunku takiej
formuły:
=NIE(CZY.BŁĄD(ZNAJDŹ("Day";A1)))
a do drugiego warunku takiej:
=NIE(CZY.BŁĄD(ZNAJDŹ("Night";A1)))
> p.s dodam tylko ze nie znam, nigdy nie widzialem polskiego excela, formuly
> po polsku dla mnie nie zrozumiale
Ja z kolei nie używam angielskich funckji, ale powinny one brzmieć w taki
sposób:
=NOT(ISERROR(FIND("Day",A1)))
Na przyszłość tutaj masz tłumaczenie funkcji angielskich i polskich:
http://excel.republika.pl/bazawiedzy/formuly/slownikfunkcji/slownikfunkcji.htm
--
Pozdrowienia
pxd74