Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 313 Skopiuj do schowka Makro rozszerzające formatowanie warunkowe
Autor Wiadomość
chips 
Exceloholic


Posty: 249
Wysłany: 19-01-2007, 12:57   Makro rozszerzające formatowanie warunkowe

Wiadomo, że formatowanie warunkowe jest ograniczone do 3 warunków.
Jak napisać kod by działał w ten sposób:

Jeżeli komórka A1>0 wtedy:
- cieniuj A1 na zielono
- pogrub czcionkę A1
- zmień czcionkę na kolor niebieski A1
- cieniuj cały wiersz1 na szaro
- zmień czcionkę w wierszu1 na italic
Jezeli A1<=0 wtedy:
- cieniuj A1 na czerwono
- pogrub czcionkę A1
- zmień czcionkę na kolor biały A1
- cieniuj cały wiersz1 na żółto
- zmień czcionkę w wierszu1 na podkreśloną

Z góry dzięki.
ID posta: 1605 Skopiuj do schowka
 
 
Rycho
Excel Expert



Pomógł: 203 razy
Posty: 322
Wysłany: 19-01-2007, 15:12   

Witam.
Nie sądzę, by w tym przypadku potrzebne było makro, gdyż masz jedynie dwa warunki.
Oczywiście osobno należy ustawić formatowanie warunkowe dla komórek w kolumnie A
'wartość komórki jest' 'większa niż' '0'
i osobno dla reszty komórek ale dla wiersza w zależności od komórki A1
'formuła jest': =($A1>0)
lub
'formuła jest': =($A1<=0)

lub takie makro:

Kod:
Sub koloruj()
  Dim kom As Range
 
  Application.EnableEvents = False
  Application.ScreenUpdating = False
 
  For Each kom In Intersect(ActiveSheet.UsedRange, Columns("A"))
    With kom
      If .Value > 0 Then
        .Interior.ColorIndex = 35
        .Font.ColorIndex = 5
        .Font.Bold = True
        With Rows(.Row)
          .Interior.ColorIndex = 15
          .Font.Underline = xlUnderlineStyleNone
          .Font.Italic = True
        End With
      Else
        .Interior.ColorIndex = 3
        .Font.ColorIndex = 5
        .Font.Bold = True
        With Rows(.Row)
          .Interior.ColorIndex = 36
          .Font.Underline = xlUnderlineStyleSingle
          .Font.Italic = False
        End With
      End If
    End With
  Next
 
  Application.ScreenUpdating = True
  Application.EnableEvents = True
End Sub

Pozdrawiam
ID posta: 1611 Skopiuj do schowka
 
 
chips 
Exceloholic


Posty: 249
Wysłany: 22-01-2007, 06:55   

Wielkie dzieki. W tym przykładzie podałem tylko niezbedne dane aby nie zagmatwać problemu. W rzeczywistości formatowanie warunkowe jest wykorzystane :-/ Jeszcze raz - Dzięki.
ID posta: 1662 Skopiuj do schowka
 
 
chips 
Exceloholic


Posty: 249
Wysłany: 22-01-2007, 17:28   

Kurcze nie działa. Jeżeli zmienie wartość w A1 nic nie się nie zmienia. Rycho sprawdzałeś to makro u siebie?
ID posta: 1696 Skopiuj do schowka
 
 
Trebor 
Excel Expert


Pomógł: 1752 razy
Posty: 4680
Wysłany: 22-01-2007, 17:38   

Będzie działać pod warunkiem, że go (makro) uruchomisz ręcznie, przyciskiem, skrótem itp.
Nie odpali się z automatu.
_________________
Trebbor@wp.pl
ID posta: 1699 Skopiuj do schowka
 
 
chips 
Exceloholic


Posty: 249
Wysłany: 22-01-2007, 17:40   

A co zrobić żeby działało z automatu? :?:
ID posta: 1701 Skopiuj do schowka
 
 
Rycho
Excel Expert



Pomógł: 203 razy
Posty: 322
Wysłany: 22-01-2007, 17:58   

Hej.
Możesz dodatkowo w module arkusza (nie module ogólnym) wstawić takie makro uruchamiające procedurę 'koloruj' po zmianie w kolumnie A:
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Columns("A")) Is Nothing Then
    Call koloruj
  End If
End Sub

Pozdrawiam
ID posta: 1704 Skopiuj do schowka
 
 
chips 
Exceloholic


Posty: 249
Wysłany: 22-01-2007, 18:23   

Dzięki. Kod jednak powodował że:
1. Jeżeli opuściłem jakieś wiersz zaznaczał go na zółto.
2. Formatowanie wiersza było nadzrzedne dla formatowania komórki.

Trochę więc zmienilem twój kod i chyba działa:

Kod:
Sub koloruj()
  Dim kom As Range
 
  Application.EnableEvents = False
  Application.ScreenUpdating = False
 
  For Each kom In Intersect(ActiveSheet.UsedRange, Columns("A"))
    With kom
      If .Value > 0 Then
        With Rows(.Row)
          .Interior.ColorIndex = 15
          .Font.Underline = xlUnderlineStyleNone
          .Font.Italic = True
        End With
        .Interior.ColorIndex = 35
        .Font.ColorIndex = 5
        .Font.Bold = True
     End If
     If .Value < 0 Then
       With Rows(.Row)
          .Interior.ColorIndex = 36
          .Font.Underline = xlUnderlineStyleSingle
          .Font.Italic = False
        End With
        .Interior.ColorIndex = 3
        .Font.ColorIndex = 5
        .Font.Bold = True
    End If
     
   End With
  Next
 
  Application.ScreenUpdating = True
  Application.EnableEvents = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Columns("A")) Is Nothing Then
    Call koloruj
  End If
End Sub
ID posta: 1710 Skopiuj do schowka
 
 
chips 
Exceloholic


Posty: 249
Wysłany: 22-01-2007, 18:48   

Kurcze a jak zmienić sprawdzany warunek
Kod:
If .Value > 0 Then

Na
Kod:
[Wartość komórki] - [Dzisiejsza data] < 30
ID posta: 1715 Skopiuj do schowka
 
 
Trebor 
Excel Expert


Pomógł: 1752 razy
Posty: 4680
Wysłany: 22-01-2007, 18:52   

"Dzisiejsza data" w VBA to Date
Pozdrawiam
_________________
Trebbor@wp.pl
ID posta: 1717 Skopiuj do schowka
 
 
chips 
Exceloholic


Posty: 249
Wysłany: 22-01-2007, 19:10   

Co tu niegra? Type mismatch :-(
Kod:
Sub dataauditu()
  Dim kom As Range
 
  Application.EnableEvents = False
  Application.ScreenUpdating = False
 
  For Each kom In Intersect(ActiveSheet.UsedRange, Columns("E"))
    With kom
      If .Value - Date < 30 Then
        .Interior.ColorIndex = 35
        .Font.ColorIndex = 5
        .Font.Bold = True
     End If
    End With
  Next
 
  Application.ScreenUpdating = True
  Application.EnableEvents = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Columns("E")) Is Nothing Then
    Call dataauditu
  End If
End Sub
ID posta: 1718 Skopiuj do schowka
 
 
Trebor 
Excel Expert


Pomógł: 1752 razy
Posty: 4680
Wysłany: 22-01-2007, 21:18   

Być może w kolumnie jest coś co nie jest datą. Aby przeskoczyć taki błąd możesz zrobić tak:
Kod:

  For Each kom In Intersect(ActiveSheet.UsedRange, Columns("E"))
    With kom
    If IsDate(.Value) Then
      If .Value - Date < 30 Then
        .Interior.ColorIndex = 35
        .Font.ColorIndex = 5
        .Font.Bold = True
     End If
     End If
    End With
  Next
_________________
Trebbor@wp.pl
ID posta: 1721 Skopiuj do schowka
 
 
chips 
Exceloholic


Posty: 249
Wysłany: 23-01-2007, 06:38   

Domyślam się, że twoja linia kodu sprawdza czy komórka jest datą. Gdy ją wstawiłem makro nic nie robi. Tak jakby wartość w kolumnie E nie była datą. A jest w formacie rrrr-mm-dd. Może to problem z deklaracjami zmiennych na poczatku kodu tzn. tą date trzeba jakoś zadeklarować (strzelam :idea: :mrgreen: )
ID posta: 1729 Skopiuj do schowka
 
 
Tajan


Pomógł: 5501 razy
Posty: 11968
Wysłany: 23-01-2007, 08:25   

A czy wartość komórki po zmianie formatu na "Ogólny" zmienia się w liczbę? Pamiętaj, że czasem nie wystarczy sama zmiana formatu do tego, aby wartość była traktowana przez Excela jak data. Możesz tez spróbować zmienić kod makra z:
Kod:
If IsDate(.Value) Then

na:
Kod:
If IsNumeric(.Value) Then
ID posta: 1733 Skopiuj do schowka
 
 
chips 
Exceloholic


Posty: 249
Wysłany: 23-01-2007, 08:56   

hmm, Otworzyłem dziś arkusz, stanąłem na końcu jednej z dat w kolumnie E i nacisnąłem ENTER i zakolorowało mi zgodnie z danymi w kodzie wszystkie daty w kolumnie E.
Więc niby działa. Tylko coś nie tak jest z warunkiem:
Kod:
If .Value - Date < 30 Then

bo nawet jezeli Data w komórce - Data dzisiejsza = 60 to zabarwia komórkę tak jak inne komórki. Generalnie jeżeli w komórce jest data (nieważne jaka) to formatuje ją wg paramterów podanych w kodzie.
P.S. Narazie nie zmieniałem kodu na:
Kod:
If IsNumeric(.Value) Then
ID posta: 1737 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.wip.pl

Archiwum

Strona uĹźywa plikĂłw cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przegl�darce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
SprawdĹş, w jaki sposĂłb przetwarzamy dane osobowe