< návrat zpět

MS Excel


Téma: KT a vyznačení aktuálního data rss

Zaslal/a 18.2.2015 16:28

Zdravím dnes po druhé, mám KT kde se data aktualizují při otevření a potom co 60 min. Jakmile soubor uzavřu a příští den otevřu tak data se aktualizují, ale dnešní datum není označený jako aktuální, označení je včerejší tj. musím pokaždé na něj kliknout, aby se mi načetla za tento aktuální datum data. Šlo by toto vyřešit tak, že po otevření souboru vy byl označený poslední datum v KT? Díky MArek

Zaslat odpověď >

#023725
avatar
Pro názornost přikládám soubor.
Příloha: zip23725_pack.zip (37kB, staženo 30x)
citovat
icon #023728
avatar
Marku, obrázky skutočne nie sú pre riešenie týchto vecí tou najlepšou prílohou 6

Ale o.k. niečo som skúsil..
To na obrázku je zrejme slicer (průřez), že? Tak som si záznamníkom makra nahral zakliknutie položky u sliceru v mojom testovacom súbore. Záznamník zaznamenal:Sub Macro1()
'
' Macro1 Macro
'

'
With ActiveWorkbook.SlicerCaches("Slicer_LEVEL1")
.SlicerItems("CHALLENGE").Selected = True
.SlicerItems("IT").Selected = False
.SlicerItems("NW").Selected = False
.SlicerItems("Other").Selected = False
.SlicerItems("(blank)").Selected = False
End With
End Sub


Slicer_LEVEL1 je názov toho prierezu, čiže v tvojom prípade to bude zrejme Slicer_Datum.
No, a budeš musieť cez nejaký cyklus, napadá ma SELECT CASE u jednotlivých SlicerItems zadať FALSE, iba u aktuálneho dátumu TRUE. To celé dať do nejakej udalosti, zrejme Workbook_Open, chce to vyskúšať, ale nič zložité to asi nebude..
Pusti záznamník a nahrané makro si jednoducho uprav, to snáď zvládneš.citovat
#023749
avatar
Díky za nakopnutí.
Už jsem na to přišel, dělá to co chci, jen je problém, že to dělá cca 20 s, protože to prochází všechny datumy, které jsou v průřezu. Víte jak by to šlo zrychlit?

Sub GroundHogDay()
Dim today As Date
today = Now
Dim todayString As String
todayString = Format$(today, "yyyy-mm-dd")

Dim item As SlicerItem

ThisWorkbook.SlicerCaches("Průřez_ProcessingDate").ClearManualFilter
With ActiveWorkbook.SlicerCaches("Průřez_ProcessingDate")
'earliest data available in the data
.SlicerItems("2015-02-16").Selected = True
End With

For Each item In ThisWorkbook.SlicerCaches("Průřez_ProcessingDate").SlicerItems

If item.Name = todayString Then
item.Selected = True
Else
item.Selected = False
End If
Next item

ThisWorkbook.RefreshAll

End Subcitovat
icon #023756
avatar
Môžeš vyskúšať, ale netuším, či sa to nejako zrýchli, inak neviem:

Sub GroundHogDay()
Dim today As Date
Dim todayString As String
Dim Item As SlicerItem, Slc As SlicerCache

today = Now
todayString = Format$(today, "yyyy-mm-dd")
Set Slc = ThisWorkbook.SlicerCaches("Prurez_ProcessingDate")

With Slc
.ClearManualFilter
.SlicerItems(todayString).Selected = False
For Each Item In .SlicerItems
Item.Selected = Not Item.Selected
Next Item
End With

Set Slc = Nothing
ThisWorkbook.RefreshAll
End Sub

edit: ešte ma napadlo, počas behu toho makra na začiatku zastaviť prepočítavanie, stránkovanie a prípadne povolenie udalosti, t.j. Calculation, ScreenUpdating, EnableEvents a na konci to vrátiť na pôvodné hodnoty. To, by, myslím, pomôcť v zrýchlení už mohlo znateľne..citovat
#023767
avatar
Zmenšil jsem výběr datumů z databáze na třicet dní. Makro postupně projede všechny dny až k dnešnímu datu a potom začne přepočítávat, ale vůbec nevím co.citovat
icon #023768
avatar
príspevok som zeditoval a doplnil, tak skús prípadne ešte to, inak už ma v tejto chvíli nenapadá nič..citovat
#023782
avatar
Děkuju za pomoc, pomohlo to, jen my není pořád jasné proč prochází všechny datumy a neoznačí přímo poslední. Ještě budu pátrat. Pěkný den MArekcitovat
icon #023785
avatar
jen my není pořád jasné proč prochází všechny datumy a neoznačí přímo poslední
Priznám sa, že asi presne nerozumiem, na čo sa pýtaš.
Pokiaľ by si chcel, aby sa do KT preniesli rovno iba data za aktuálny deň, tak je možné upraviť priamo dotaz, ktorý do excelu (stále riešiš pravdepodobne výmenu dát s SQL serverom, však?) dotiahne iba dáta za tento konkrétny dátum.

Pokiaľ ale chceš v exceli dáta za nejaký rozsah dátumov (eventuálne všetky) a ide ti len o to, aby bol aktuálny dátum vybraný v sliceri, no tak, pokiaľ to má byť makrom (vadí ti, že by si to mal zaklikávať ručne), tak nepoznám spôsob, ktorý by to dokázal bez nejakého cyklu. Problém je totiž v tom, že pravdepodobne nie je možné (neprišiel som na spôsob, akým by to možné bolo) nastaviť vlastnosť selected u všetkých položiek naraz na false. Minimálne u jednej musí byť true. Úplne rovnako ti to vytvorí záznamník makra. Pokiaľ to robíš ručne, tak skutočne stačia iba 2 kliky:
1. zrušenie filtra
2. kliknutie na konkrétnu položku
Záznamník ale zapíše príslušnú hodnotu vlastnosti selected u každej položky - preto potom v kóde ten cyklus, ako som uviedol, vo VBA to pravdepodobne inak, než nastaviť to u každej položky jednotlivo, asi nepôjde. Excel samotný na to asi používa niečo rýchlejšie, o VBA je známe, že to nie je vždy najrýchleší spôsob.
Priznám sa ale, že pokiaľ riešiš to, že kód beží kvôli kýženému výsledku pár sekúnd, tak mi to príde ako úsilie neprimerané k tomu, čo chceš nakoniec získať, t.j. úsporu pár sekúnd. Za seba by som to rád uzavrel, nemám dôvod riešiť vec, ktorá mi príde ako absolútne zbytočná.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje