EXCEL - změna barvy buňky na základě libovolné změny buňky

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

ppcko
nováček
Příspěvky: 12
Registrován: srpen 13
Pohlaví: Muž

EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod ppcko » 07 led 2018 18:23

Dobrý den,

mohli byste mi prosím poradit, jak změnit barvu buňky, ve které došlo ke změně hodnoty?

Jde o rozeznání buňky, do kterých se importovaly nové hodnoty. Proto mi na to jednoduchým způsobem nepasuje standardní podmíněné formátování.

Pokud je nutné makro, tak lze.

Díky moc, PP



Reklama
ppcko
nováček
Příspěvky: 12
Registrován: srpen 13
Pohlaví: Muž

Re: EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod ppcko » 08 led 2018 06:25

Aktuálně se mi daří tímto makrem zjistit, ve které buňce došlo ke změně, ale nevím, které makro zavolat (nebo rovnou napsat) na změnu barvy. Víte někdo?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range

' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("A1:Z50")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then

Call JAKÉ MAKRO???

End If
End Sub

Uživatelský avatar
atari
Level 4.5
Level 4.5
Příspěvky: 1663
Registrován: říjen 08
Pohlaví: Muž

Re: EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod atari » 08 led 2018 16:03

Tady máš 4 varianty jak změnit barvu buňky přes VBA:
http://office.lasakovi.com/excel/vba-li ... excel-vba/

ppcko
nováček
Příspěvky: 12
Registrován: srpen 13
Pohlaví: Muž

Re: EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod ppcko » 08 led 2018 17:04

Díky moc, to jsem potřeboval.

Funguje to (y)

Teď ještě musím kliknutím změnit barvy zpět, ale to snad zvládnu :)

Uživatelský avatar
atari
Level 4.5
Level 4.5
Příspěvky: 1663
Registrován: říjen 08
Pohlaví: Muž

Re: EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod atari » 08 led 2018 17:31

Range("b3").Interior.Pattern = x1none

xlnc
Level 3.5
Level 3.5
Příspěvky: 799
Registrován: červenec 11
Pohlaví: Muž

Re: EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod xlnc » 08 led 2018 19:36

No kluci...
administrátor ProExcel.cz | lektor | vývojář | léčitel pro Microsoft Excel

Uživatelský avatar
atari
Level 4.5
Level 4.5
Příspěvky: 1663
Registrován: říjen 08
Pohlaví: Muž

Re: EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod atari » 08 led 2018 22:18

Co je špatně? Pokud existuje lepší způsob jak měnit barvy, tak se nechám poučit...

xlnc
Level 3.5
Level 3.5
Příspěvky: 799
Registrován: červenec 11
Pohlaví: Muž

Re: EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod xlnc » 09 led 2018 17:03

Nevidím celek, ale koncept je tak trochu hatlamatla, nerozumím "Teď ještě musím kliknutím změnit barvy zpět, ale to snad zvládnu :)" a nakonec práce s barvami přes Pattern je zjednodušená a ne úplně korektní, lepčí je pracovat pouze s vlastností Color (viz https://proexcel.cz/barvy-ve-vba/). Jako nejlepší se mi jeví ukládání historie změn do vyhrazeného listu (změněná buňka, uživatel). V případě, že sledujeme celý sešit, pak je potřeba zpracovat událost na úrovni aplikace a uvádět i list, na kterém došlo ke změně. Ještě horší varianta je, pokud chceme registrovat historickou hodnotu buňky před změnou (zde se neřeší).
administrátor ProExcel.cz | lektor | vývojář | léčitel pro Microsoft Excel

ppcko
nováček
Příspěvky: 12
Registrován: srpen 13
Pohlaví: Muž

Re: EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod ppcko » 10 led 2018 18:18

Zdravím...

Kliknutím změnit barvy jsem vyřešil takto (tlačítko s tímto makrem):
Sub puvodni_stav()
'
' puvodni_stav Makro
'

'
Sheets("MIMO").Select

Range("A2:AR2").Interior.Color = RGB(226, 239, 218)
Range("A3:AR3").Interior.Color = RGB(255, 255, 255)

Range("A4:AR4").Interior.Color = RGB(226, 239, 218)
Range("A5:AR5").Interior.Color = RGB(255, 255, 255)

Range("A6:AR6").Interior.Color = RGB(226, 239, 218)
Range("A7:AR7").Interior.Color = RGB(255, 255, 255)

Range("A8:AR8").Interior.Color = RGB(226, 239, 218)
Range("A9:AR9").Interior.Color = RGB(255, 255, 255)

Range("A10:AR10").Interior.Color = RGB(226, 239, 218)
Range("A11:AR11").Interior.Color = RGB(255, 255, 255)

Range("A12:AR12").Interior.Color = RGB(226, 239, 218)
Range("A13:AR13").Interior.Color = RGB(255, 255, 255)

Range("A14:AR14").Interior.Color = RGB(226, 239, 218)
Range("A15:AR15").Interior.Color = RGB(255, 255, 255)

Range("A16:AR16").Interior.Color = RGB(226, 239, 218)
Range("A17:AR17").Interior.Color = RGB(255, 255, 255)

Range("A18:AR18").Interior.Color = RGB(226, 239, 218)
Range("A19:AR19").Interior.Color = RGB(255, 255, 255)

Range("A20:AR20").Interior.Color = RGB(226, 239, 218)
Range("A21:AR21").Interior.Color = RGB(255, 255, 255)

Range("A22:AR22").Interior.Color = RGB(226, 239, 218)
Range("A23:AR23").Interior.Color = RGB(255, 255, 255)

Range("A24:AR24").Interior.Color = RGB(226, 239, 218)
Range("A25:AR25").Interior.Color = RGB(255, 255, 255)

Range("A26:AR26").Interior.Color = RGB(226, 239, 218)
Range("A27:AR27").Interior.Color = RGB(255, 255, 255)

Range("A28:AR28").Interior.Color = RGB(226, 239, 218)
Range("A29:AR29").Interior.Color = RGB(255, 255, 255)

Range("A30:AR30").Interior.Color = RGB(226, 239, 218)
Range("A31:AR31").Interior.Color = RGB(255, 255, 255)

Range("A32:AR32").Interior.Color = RGB(226, 239, 218)
Range("A33:AR33").Interior.Color = RGB(255, 255, 255)

Range("A34:AR34").Interior.Color = RGB(226, 239, 218)



' Původní barvy na swap listě

Sheets("SWAP").Select

Range("A2:AC2").Interior.Color = RGB(226, 239, 218)
Range("A3:AC3").Interior.Color = RGB(255, 255, 255)

Range("A4:AC4").Interior.Color = RGB(226, 239, 218)
Range("A5:AC5").Interior.Color = RGB(255, 255, 255)

Range("A6:AC6").Interior.Color = RGB(226, 239, 218)
Range("A7:AC7").Interior.Color = RGB(255, 255, 255)

Range("A8:AC8").Interior.Color = RGB(226, 239, 218)
Range("A9:AC9").Interior.Color = RGB(255, 255, 255)

Range("A10:AC10").Interior.Color = RGB(226, 239, 218)
Range("A11:AC11").Interior.Color = RGB(255, 255, 255)

Range("A12:AC12").Interior.Color = RGB(226, 239, 218)
Range("A13:AC13").Interior.Color = RGB(255, 255, 255)

Range("A14:AC14").Interior.Color = RGB(226, 239, 218)
Range("A15:AC15").Interior.Color = RGB(255, 255, 255)

' Range("A16:AC16").Interior.Color = RGB(226, 239, 218)
' Range("A17:AC17").Interior.Color = RGB(255, 255, 255)

' Range("A18:AC18").Interior.Color = RGB(226, 239, 218)
' Range("A19:AC19").Interior.Color = RGB(255, 255, 255)

' Range("A20:AC20").Interior.Color = RGB(226, 239, 218)
' Range("A21:AC21").Interior.Color = RGB(255, 255, 255)

' Range("A22:AC22").Interior.Color = RGB(226, 239, 218)
' Range("A23:AC23").Interior.Color = RGB(255, 255, 255)

' Range("A24:AC24").Interior.Color = RGB(226, 239, 218)
' Range("A25:AC25").Interior.Color = RGB(255, 255, 255)

' Range("A26:AC26").Interior.Color = RGB(226, 239, 218)
' Range("A27:AC27").Interior.Color = RGB(255, 255, 255)

' Range("A28:AC28").Interior.Color = RGB(226, 239, 218)
' Range("A29:AC29").Interior.Color = RGB(255, 255, 255)

' Range("A30:AC30").Interior.Color = RGB(226, 239, 218)
' Range("A31:AC31").Interior.Color = RGB(255, 255, 255)

' Range("A32:AC32").Interior.Color = RGB(226, 239, 218)
' Range("A33:AC33").Interior.Color = RGB(255, 255, 255)

' Range("A34:AC34").Interior.Color = RGB(226, 239, 218)



End Sub


-----

Šlo by to zjednodušit, aby se ty dva řádky opakovaly do určité hranice? Takhle vypisovat tisíc řádků je nesmysl :)

Dodatečně přidáno po 2 minutách 22 vteřinách:
Nicméně při uživatelské změně to takto funguje, problém nastává při importu nových dat, protože nová data se importují všechny, včetně starých nezměněných. Tzn., že makro vyhodnotí změnu ve všech buňkách.

Lze tedy nějak jednoduše porovnat původní stav buňky s novou, aby nedocházelo ke zbarvení, pokud je nová hodnota stejná, jako ta stará?

Hodnota Target.Address je totiž ta nová hodnota a nevím jak jednoduše předtím získat původní hodnotu buňky.

Díky moc!

Uživatelský avatar
atari
Level 4.5
Level 4.5
Příspěvky: 1663
Registrován: říjen 08
Pohlaví: Muž

Re: EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod atari » 10 led 2018 20:53

Zjednodušíš to tak, že použiješ formát Cells(hodnota1, hodnota2) a dáš to do cyklu.

Zbytek dotazu je opravdu hatlamatla...

ppcko píše:[b]Lze tedy nějak jednoduše porovnat původní stav buňky s novou ...
Tomu nerozumím, nějak to zkonkretizuj.

Uživatelský avatar
elninoslov
Level 1.5
Level 1.5
Příspěvky: 140
Registrován: červen 13
Pohlaví: Muž

Re: EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod elninoslov » 11 led 2018 13:23

Ano lze. Ale rozumne iba v prípade, že sa dáta menia iba užívateľsky definovaným spôsobom - teda Vašim makrom, a nie po každom prepočítaní listu. Pri každej Vašej zmene si uložte kópiu dát na skrytý list, odtiaľ pri ďalšej zmene kontrolujete predošlú hodnotu, urobíte čo treba, a opäť uložíte nové do skrytého listu.
Tie farby sa majú meniť na základe nejakej nešpecifikovanej podmienky ? Keď sa jedná iba o vymaľovanie každého párneho/nepárneho riadku rovnakou farbou, skúste použiť štýl na ExcelTable.
Priložte prílohu s príkladom, lebo takto to máte podľa mňa celé zle a pomalé.

ppcko
nováček
Příspěvky: 12
Registrován: srpen 13
Pohlaví: Muž

Re: EXCEL - změna barvy buňky na základě libovolné změny buňky

Příspěvekod ppcko » 11 led 2018 15:38

Vkládám ukázku, jak to aktuálně funguje na testovací tabulce, aby to tedy nebylo tak zmatené :)

zmena_barvy_bunky.xlsm.zip


Jde o to, že data se importují všechna znovu včetně nových, tudíž se zabarví všechna pole. Takže je potřeba, aby se zabarvilo pole jen v případě, kdy je nová hodnota rozdílná od původní.

Je to takto srozumitelnější?

Děkuju a přeji hezký den, PP
Nemáte oprávnění prohlížet přiložené soubory.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Excel - vypsání datumů ze sloupce podle obsahu buňky na řádku
    od tantalis » 02 úno 2018 08:01 » v Kancelářské balíky
    11
    502
    od elninoslov
    02 úno 2018 16:19
  • Vložení hodnoty buňky do textu druhé
    od DvR » 10 pro 2017 21:24 » v Kancelářské balíky
    2
    283
    od Michremi
    11 pro 2017 06:56
  • Makro na automaticke vyplnanie bunky
    od tsibee » 19 dub 2018 10:44 » v Kancelářské balíky
    2
    382
    od tsibee
    20 dub 2018 08:40
  • Makro - zaznamenání data zápisu do buňky v excelu
    od slama.fortunes » 14 úno 2018 13:11 » v Kancelářské balíky
    14
    742
    od slama.fortunes
    15 úno 2018 15:42
  • Automatické spuštění makra po změně buňky
    od Wertigo » 27 zář 2017 10:14 » v Kancelářské balíky
    3
    560
    od Wertigo
    29 zář 2017 08:31

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: CommonCrawl [Bot] a 1 host