Stránka 2 z 2

Napsal: 19 bře 2005 23:44
od abc
předpokládám, že tahle tabulka bude mít během roku max. 200 záznamů, to by bylo dobrý kdyby se obarvovalo automaticky, abych nemusel pořád to makro spouštět ručně... Volný řádky nebudou.
To obarvení na "šedo" by bylo dobrý podle "ano/ne", ale mám v tabulce sloupec "zaplaceno" (sloupec H), kde budu psát konkrétní datum zaplacení, tak jestli by to např. nešlo podle toho.
To makro by mělo "běžet" (jestli to jde) až od třetího řádku, protože v 1. a 2. řádku mám název tabulky a názvy sloupců.

Napsal: 20 bře 2005 10:25
od miras
Jako vždy existuje nespočet možností jak to provést. Něco málo nadhodím a až se domluvíme jak by to mělo pracovat, pokusím se vymyslet aby to tak pracovalo :wink:
K tomu barvení na šedo. Když bude zakázka nezaplacená, bude v tý buňce něco, nebo bude prázdná. Jestli je prázdná se dá kontrolovat, kdyby tam mělo bejt něco napsaný, bylo by potřeba aby to bylo u všech nezaplacenejch zakázek stejný.

K tomu aby se spouštělo automaticky. Každej sešit má tzv. události. Když třeba ukládáš, jedná se o událost, který může bejt přiřazený "makro". Událostí je dost, pro naše účely by byly dobře využitelný asi události Před uložením a Při změně.
V prvním případě by si provedl všechny potřebný změny, zmáčknul Ctrl+S pro uložení, címž by si spustil makro přiřazený daný události a to by ti obarvilo záznamy.
V druhým případě by se makro spuštělo při každý změně provedený v sešitě. Změníš obsah jakýkoliv buňky, spustí se makro. To projde od vrchu až dolů všechny záznamy, vyhodnotí jestli vyhovujou daný podmínce a případně je obarví. A to chvilku trvá. Když je záznamů málo, dejme tomu těch 200, ani nepoznáš že se něco stalo, jen ti problikne kurzor. Logicky když záznamů přibejvá, činnost makra se prodlužuje.

Vnitřní struktura procedur je stejná, takže bych ti pak dal stručnou školu programování v Excelu a sám by sis mohl zkoušet co se stane když daný makro přiřadíš k jiný události :wink:

Napsal: 20 bře 2005 19:43
od abc
Do tý buňky "zaplaceno" budu psát pouze datum kdy dojde k platbě, jinak bude vždy prázdná u všech zakázek.
To spuštění automaticky jesli událost Před uložením nebo Při změně bych nechal na tobě, budu mít stějně jen kolem 200 záznamů...
S tim školenim.., no nevim, nevim, zda to pochopim :wink: :D

Napsal: 20 bře 2005 21:50
od miras
Měl bych tu pro tebe další verzi :wink:
Začnu zdrojákem:

Kód: Vybrat vše

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Mesto As String
Dim radek, x, y As Integer
x = ActiveCell.Row
y = ActiveCell.Column
Cells(3, "B").Select    'Urcuje radek a sloupec kde zacinaji vlastni data, ted teda treti radek a sloupec B
For radek = 3 To ActiveCell.CurrentRegion.Count 'Tady zacina vlastni barveni, zase polozka radek urcuje na kterym radku zacne :)
    If Cells(radek, "C").Value <> "" Then   'Tou polozkou v uvozovkach (aktualne "C") nastavujes sloupec s informaci o zaplaceni
        Rows(radek).Select
        Selection.Interior.ColorIndex = 15
    Else:
        Mesto = Cells(radek, "B")   'Tady ta polozka v uvozovkach urcuje sloupec s nazvem mesta
        Select Case Mesto
        Case "Praha"    'Podminek muze bejt kolik potrebujes, staci pridat dalsi vetev Case a zmenit barvu pro dany mesto
            Rows(radek).Select  'Ze muze bej podmonek neomezene vlastne neni tak uplne pravda,pac Excel zna jen 56 barevnejch konstant
            Selection.Interior.ColorIndex = 4   ' Co ktery cislo znaci za barvu najdes tady: http://www.mvps.org/dmcritchie/excel/colors.htm
        Case "Brno"
            Rows(radek).Select
            Selection.Interior.ColorIndex = 17
        Case "Ostrava"
            Rows(radek).Select
            Selection.Interior.ColorIndex = 27
        Case "Plzeň"
            Rows(radek).Select
            Selection.Interior.ColorIndex = 33
        End Select
    End If
Next radek
Cells(x, y).Activate
End Sub


Otevři si Excel, nejlíp úplně novej neposkvrněnej sešit, dej Alt+F11, tím se dostaneš do editoru jazyka VBA. Tedy ta šílenost ve který sem tohle napsal :wink:. Vlevo poklepej na ThisWorkbook a tam vlož tenhle kód. Výsledek by měl vypadat zhruba takhle:
Obrázek

Jak už sem napsal do kódu jako komentáře: Začíná se teda barvit na souřadnicích 3B, s tím že položka zaplaceno by byla ve sloupci C. Jestli to tak není stačí přepsat jedno písmenko.
Ještě sem vložím ten link kde je tabulka s barevnejma konstantama: http://www.mvps.org/dmcritchie/excel/colors.htm

Vyzkoušej a napiš svoje dojmy :D. Teď to teda formátuje při každý změně, kdyby se ti to zdálo zabržděný vysvětlil bych ti jak to přiřadit k jiný události :wink:

  Vyřešeno

Napsal: 03 dub 2005 17:34
od miras
Tak tady je to ještě jednou, poupravený tak, aby to nebarvilo celej řádek, ale jen po sloupec I:

Kód: Vybrat vše

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Const sloupec As String = "I"   'Tady si nastavis do kteryho sloupce se ma barvit
Dim Mesto As String
Dim radek, x, y As Integer
Dim zacatek, konec As String
x = ActiveCell.Row
y = ActiveCell.Column
konec = "I"
Cells(3, "B").Select    'Urcuje radek a sloupec kde zacinaji vlastni data, ted teda treti radek a sloupec B
For radek = 3 To ActiveCell.CurrentRegion.Count 'Tady zacina vlastni barveni, zase polozka radek urcuje na kterym radku zacne :)
    If Cells(radek, "C").Value <> "" Then   'Tou polozkou v uvozovkach (aktualne "C") nastavujes sloupec s informaci o zaplaceni
        Range(Cells(radek, "A"), Cells(radek, sloupec)).Select
        Selection.Interior.ColorIndex = 15
    Else:
        Mesto = Cells(radek, "B")   'Tady ta polozka v uvozovkach urcuje sloupec s nazvem mesta
        Select Case Mesto
        Case "Praha"    'Podminek muze bejt kolik potrebujes, staci pridat dalsi vetev Case a zmenit barvu pro dany mesto
            Range(Cells(radek, "A"), Cells(radek, sloupec)).Select  'Ze muze bej podmonek neomezene vlastne neni tak uplne pravda,pac Excel zna jen 56 barevnejch konstant
            Selection.Interior.ColorIndex = 4   ' Co ktery cislo znaci za barvu najdes tady: http://www.mvps.org/dmcritchie/excel/colors.htm
        Case "Brno"
            Range(Cells(radek, "A"), Cells(radek, sloupec)).Select
            Selection.Interior.ColorIndex = 17
        Case "Ostrava"
            Range(Cells(radek, "A"), Cells(radek, sloupec)).Select
            Selection.Interior.ColorIndex = 27
        Case "Plzeň"
            Range(Cells(radek, "A"), Cells(radek, sloupec)).Select
            Selection.Interior.ColorIndex = 33
        End Select
    End If
Next radek
Cells(x, y).Activate
End Sub