[VB, Excel]Kolorowanie komórki z pewnym warunkiem

Odpowiedz Nowy wątek
2010-12-10 18:58
Sushi
0

Witam,

Nie przepadam kompletnie za tym językiem i tykam się go w sumie drugi raz w życiu (z pierwszego już prawie nic nie pamiętam).
Mam w dokumencie kilka komórek pokolorowanych na różne kolory z różnymi wartościami liczbowymi, rosnąco, jedna pod drugą, np.

300 (czerwone tło)
400(pomarańczowe tło)
1000 (żółte tło)
...
itd.

Tego w sumie jest 7.

W innej, długiej na ~30 komórek kolumnie mam też wartości liczbowe, też rosnąco.

I teraz: Chciałem zrobić coś takiego, że w momencie, gdy w tej drugiej kolumnie, wartość liczbowa będzie większa niż np. 300, to żeby przybrała czerwone tło, jak potem przekroczy 400, to pomarańczowe, jak 1000, to żółte itd. Generalnie na pewno musi być jakiś If, ale jak wstawić za pomocą tych makr wartość do komórki, jak zmienić kolor itd.... tego nie potrafię ogarnąć.

Pozostało 580 znaków

2010-12-10 19:47
0

Jeżeli nie musisz używać VBA to w menu Format->Formatowanie warunkowe. Jeżeli koniecznie VBA to najprościej nagrać sobie makro (np zaznaczając komórkę i ustawiając jej kolor wypełnienia) i podejżeć jakie komendy są wykonywane. Jak nagrać makro? - Excel i F1.

Pozostało 580 znaków

2010-12-10 22:21
Sushi
0

Takoż próbowałem. Ale nie wiem jak się odnieść do wartości w danej komórce. Próbowałem podobne rzeczy robić, nagrywać różne makra, ale wiele rzeczy sam nie obkminiłem. Help nic nie daje, oczywiście, a VB uprzykrza życie.

A formatowanie warunkowe byłoby ok, gdyby nie to że ktoś (jakiś idiota chyba) wymyślił że tylko 3 warunki max mogą być. A ja, mówiłem już, że mam 7 pozycji...

Pozostało 580 znaków

2010-12-10 22:47
bo
0

Napisałeś długiej na ~30 komórek kolumnie mam też wartości liczbowe
oraz ale jak wstawić za pomocą tych makr wartość do komórki.
Te zdania są sprzeczne.
Makro ma wyliczyć wartości, wpisać do komórki i zmienić kolor tła?
Dane do komórek wpiszesz sam, a makro ma czuwać i zmieniać kolor tła?
Dane do komórek wpiszesz sam, klikniesz w jakiś przycisk, a dzielne makro pozmienia kolory tła?

Pozostało 580 znaków

2010-12-10 23:03
Sushi
0
bo napisał(a)

Napisałeś długiej na ~30 komórek kolumnie mam też wartości liczbowe
oraz ale jak wstawić za pomocą tych makr wartość do komórki.
Te zdania są sprzeczne.

Sory, nie wyraziłem się jasno. W tym drugim po prostu wymieniałem po kolei rzeczy z makr, których nie umiem. Nie umiem ODNIEŚĆ się do komórki w żaden sposób. W helpie pisze tylko o funkcjach, ale co mi po nich, jak nie ma jak tego w arkusz wrzucić...

Chodzi mi o tą drugą opcję - ja wklepuję daną, wpiszę np. 301, niech mi pokoloruje na czerwono po opuszczeniu komórki. Automatycznie (tak działa to formatowanie warunkowe, tylko że tylko 3 warunki są :/ ). I jeszcze jak mam tą kolumnę na boku - żeby ten kolor był kopiowany stamtąd. Czyli jak sobie zmienię kolor tamtej komórki na boku, żeby się zmieniły wszystkie kolory tych komórek w głównej 30pozycjowej kolumnie. Jakbym zmienił wartość w którejś z komórek na boku, żeby się zmieniły kolory (np. zmienię z 300 na 350, i komórka z czerwonej się odbarwi z powrotem na domyślny czyli brak wypełnienia).

Pozostało 580 znaków

2010-12-11 09:19
bo
0

Nie mam Excela (i używam go sporadycznie). W Calcu kod makra wyglądałby tak

Sub Koloruj
  For w = 0 To 20
    For k =0  To 30
      Cell = ThisComponent.Sheets(1).getCellByPosition(k,w)
      v = Cell.Value
      If v < 20 Then 
        Cell.CellBackColor = ThisComponent.Sheets(1).getCellRangeByName("B24").CellBackColor
      ElseIf v < 40 Then
        Cell.CellBackColor = ThisComponent.Sheets(1).getCellRangeByName("C24").CellBackColor
      ElseIf v < 60 Then
        Cell.CellBackColor = ThisComponent.Sheets(1).getCellRangeByName("D24").CellBackColor
      Else 
        Cell.CellBackColor = ThisComponent.Sheets(1).getCellRangeByName("E24").CellBackColor
      End If
    Next k
  Next w  
 
End Sub

W Excelu zamiast ThisComponent.Sheets(1).getCellByPosition(k,w) można użyć Cells(w,k), kolor jest opisywany chyba przez Interior.ColorIndex.
Jeżeli zmieniane jest tło wielu komórek to wykonanie makra chwilę trwa. Można makro podpiąć pod klawisz (i W Calcu i w Excelu). W Calcu można podpiąć wykonanie makra pod utratę fokusu przez komórkę (w Excelu nie wiem).

Pozostało 580 znaków

2010-12-11 12:45
0

A formatowanie warunkowe byłoby ok, gdyby nie to że ktoś (jakiś idiota chyba) wymyślił że tylko 3 warunki max mogą być.
Excel 2007 i 2010 już nie ma tego ograniczenia.

Pozostało 580 znaków

2010-12-11 15:40
Sushi
0

Dzięki, bo, bardzo pomogłeś ;)

Bo znowu (przepraszam, nie bić! :( ) źle się wyraziłem - chodziło właśnie o Calca. Może to dlatego że wydawało mi się że Basic i w Excelu i w Calcu jest taki sam...

Trochę przerobiłem to Twoje makro, i już prawie jest tak jak trzeba. Jedyne czego mi brakuje, to żeby toto wykonywało się automatycznie, nie żeby trzeba było nacisnąć guzik, tylko - zmieni się wartość - i już się odpowiednio komórka koloruje. I, jakoś błędnie mu wychodziło odniesienie się do wartości komórki w innym arkuszu (nie tak jak Ty - że porównujesz z wartością 30/60/90... itd, ale przez

If v < ThisComponent.Sheets(5).getCellByPosition(1,1).Value

I jakoś toto nie wiedzieć czemu nie działało poprawnie (od 300 (które jest pierwszym progiem) zaczynało mi kolorować od razu na ten ostatni kolor (ten po samym Else)), nie udało mi się tego zdebugować, zrozumieć czemu tak. No ale to już jest szczegół.

Teraz tylko ten automat by się przydał i będzie super ^^

Pozostało 580 znaków

2010-12-11 16:16
bo
0

Dodaj jeszcze to:

 
Sub Main
  lst = createUnoListener("my_", "com.sun.star.util.XModifyListener")
  komorka = ThisComponent.Sheets(1).getCellByPosition(0,0)
  komorka.addModifyListener(lst)
  komorka = ThisComponent.Sheets(1).getCellByPosition(1,1)
  komorka.addModifyListener(lst) 
  rem i analogiczne wiersze dla każdej komórki, której kolor ma zależeć od wartości.   
End Sub
 
Sub my_modified()
  Koloruj()  
End Sub

Metoda my_modified Listenera reaguje tylko na zmiany wartości, jeżeli zmienisz tło w komórkach wzorcowych, to chwilowo nic się nie dzieje. Zmiany kolorów nastąpią dopiero po zmianie wartości.
Nie jestem ekspertem Calca, może w inny sposób da się reagować automatycznie na zmiany koloru tła.

Pozostało 580 znaków

2010-12-11 19:08
Sushi
0

Łojeju, to jak będę miał w przyszłości 2000 takich komórek, to muszę 4000 linijek napisać?... już prościej guzik klikać po każdym update... Hmmm nie ma opcji do tej listy komórek w listenerze dodać całego zakresu? Jak sobie zrobię zakres, nazwę go np. "dane".

Pozostało 580 znaków

2010-12-11 19:50
bo
0

O pętlach słyszałeś?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych 0, gości 1, botów: 0