< návrat zpět

MS Excel


Téma: Kontingenční tabulka rss

Zaslal/a 1.7.2011 7:24

Zdravím, mám vytvořenou kontingenční tabulku (pro evidenci docházky z externích dat). V horní části mohu filtrovat podle jména, měsíce a roku. Pokouším se vymyslet způsob jak vytisknout všechny jednotlivé záznamy podle jména. Rok i měsíc si vyberu ručně a pak jsem se pokusil vytvořit makro aby mě vytisklo jednotlivé záznamy docházky, všech zaměstnanců hromadně. Ale nějak nemohu přijít na to, jak to do toho makra dostat, aniž bych tam nemusel vypisovat jmenovitě jednotlivé zaměstnance. Milan

Zaslat odpověď >

Strana:  1 2   další »
#005428
avatar
Myslím, že to jde třeba takto ... R. (uprav si jméno "data")
Sub konti_tisk()
Dim a As PivotItem
Dim c As New Collection
Dim cc
With ActiveSheet.PivotTables(1)
' Vybuduji buffer možných jmen
For Each a In .PivotFields("Data").PivotItems
Call c.Add(a.Name)
Next a
For Each cc In c
' Nastavím položku
.PivotFields("Data").PivotItems(cc).Visible = True
' Nìjak ji vytisknu
ActiveSheet.PrintOut
Next cc
End With
Set c = Nothing
Set a = Nothing
End Sub
citovat
#005430
avatar
Nějak se mi to rozleželo v hlavě a myslím, že první verze nemusí vždy fungovat (v mém případě na kt fungovala :) ). Tato druhá by měla býti již v pořádku a funkční na jakoukoliv položku (alespoň myslím).

Sub konti_tisk()
Dim i As Long
Dim a As PivotItem
Dim c As New Collection
Dim cc
Dim b As Boolean
Dim s As String
Dim PolozkaKontiTabulky As String
' ---------------------------------------------------------
PolozkaKontiTabulky = "Exp. st" 'Uprav podle své tabulky !!!
' ---------------------------------------------------------
With ActiveSheet.PivotTables(1)
' Vybuduji buffer možných jmen
For Each a In .PivotFields(PolozkaKontiTabulky).PivotItems
c.Add (a.Name)
Next a
b = True
For Each cc In c ' Nastavím první a ostatní skryji (jinak chyba)
.PivotFields(PolozkaKontiTabulky).PivotItems(cc).Visible = b
If b Then b = False
Next cc
s = ""
For Each cc In c ' Vytisknu
.PivotFields(PolozkaKontiTabulky).PivotItems(cc).Visible = True
If s <> "" Then
.PivotFields(PolozkaKontiTabulky).PivotItems(s).Visible = False
End If
' Nìjak ji vytisknu
ActiveSheet.PrintOut
s = cc
'Debug.Print cc
Next cc
End With
Set c = Nothing
Set a = Nothing
End Sub
citovat
#005446
avatar
Asi dělám něco špatně

Sub konti_tisk()
Dim i As Long
Dim a As PivotItem
Dim c As New Collection
Dim cc
Dim b As Boolean
Dim s As String
Dim Jméno As String
' ---------------------------------------------------------
PolozkaKontiTabulky = "Jméno" 'Uprav podle své tabulky !!!
' ---------------------------------------------------------
With ActiveSheet.PivotTables("Kontingenční tabulka 1")
' Vybuduji buffer možných jmen
For Each a In .PivotFields("Jméno").PivotItems
c.Add (a.Name)
Next a
b = True
For Each cc In c ' Nastavím první a ostatní skryji (jinak chyba)
.PivotFields("Jméno").PivotItems(cc).Visible = b ' Tady se mě to sekne
If b Then b = False
Next cc
s = ""
For Each cc In c ' Vytisknu
.PivotFields("Jméno").PivotItems(cc).Visible = True
If s <> "" Then
.PivotFields("Jméno").PivotItems(s).Visible = False
End If
' Ni`jak ji vytisknu
ActiveSheet.PrintOut
s = cc
'Debug.Print cc
Next cc
End With
Set c = Nothing
Set a = Nothing
End Subcitovat
#005447
avatar
.PivotFields("Jméno").PivotItems(cc).Visible = b ' Tady se mě to sekne

Typnul bych jsi, že jsi všechny zaměstnance skryl a nechal jen jednoho abys to nyní mohl vyzkoušet. Pak to napoprvé skončí chybou, protože minimálně jeden musí být zobrazený. Musíš mít nejlépe všechny zaměstnance zobrazené nebo min. dva. Funguje to tak, že se načte seznam VŠECH zaměstnanců, pak se skryje KROMĚ PRVNÍHO (tady Ti to háže chybu protože je jeden a ten se nesmí skrýt) a po jednom to začne tisknout. Účel byl vytisknout stejnou konti tabulku pro jednotlivé zam. Nebo jsem to špatně pochopil ? Proto jsem neřešil tisk jednoho zam. Můžeš na zkoušku zrušit debug a zakomentovat print. V okně si pak vypiš jména. Tak jsem to ladil ... tj. bez tisku. R. PS: (Nebo to pošli na PM.)


If c.Count < 2 Tehn
MsgBox ("Tisk povolen pro min. dva kousky")
Exit Sub
End If

... přilepit za první for. R.citovat
#005454
avatar
Přikládám soubor. M.
Příloha: rar5454_tisk.rar (186kB, staženo 32x)
citovat
#005455
avatar
Sub konti_tisky()
Dim a As PivotItem
Dim c As New Collection
Dim cc
With ActiveSheet.PivotTables(1).PivotFields("Jméno")
For Each a In .PivotItems
c.Add (a.Name)
Next a
For Each cc In c
Range("B3").Value = cc
ActiveSheet.PrintOut
Next cc
End With
End Sub

Škoda, že jsi nenapsal, že se jedná o stránkový prvek :( R.citovat
#005464
avatar
Já bych to i napsal, kdybych to věděl. Jen to tiskne všechny střediska. Ani sem nevěděl, že tam jsou. Potřeboval bych to ještě omezit na středisko KOM. Jinak super. Díkcitovat
#005466
avatar
V tabulce je středisko jen KOM, takže není co řešit :) Pokud jsi data neposlal celá, a ostatní střediska Tě ryze nezajímají, pak je nejlepší, setřídit data podle střediska a ty která nepotřebuješ, vymazat. V kontitabulce pak provedeš jen aktualizaci a začeš tisknout. Pokud je situace opačnán, pak stačí­ pole střediska přesunout do tabulky a nastavit požadované středisko. Předpokládám, že by v tomto případě stačilo přetáhnout je nahoru do stránkové položky a nastavit výběr stejně jak to děláš u měsíce. Taky je to nejrychlejší :) R.citovat
#005467
avatar
No právě v tabulce je středisko KOM, ale někde to bere i jména z ostatních středisek. Přidal jsem si do tabulky i pole se střediskem (stejně jako měsíc). Aktualizoval tabulku a spustil makro. A pořád mě to tiskne i jména co vůbec v datech nejsou. odkud si to ty jména natahuje. Stahl jsem si ten soubor z netu a doplnil do něj to makro. A opět to tiskne lidi z jiných středisek. Tak nevím, kde jsou schovaný. Že je v datech nevidím, ale někde si je to makro najít muselo.citovat
#005469
avatar
Rozumím. Ty data se tahají s PIVOT_TABLE_CACHE. Jen nevím jak ji vyprázdnit. Řešení jsou ale minimálně dvě. Já tento problém řeším makrem, které mi vytvoří a zformátuje pivot tabulku vždy znovu. Pokud máš OFF2003 pak asi musíš sestavit tabulku znovu :( . Pokud máš OFF2007 a výš pak si klepneš na kartu DATA a najdeš POČET ZACHOVANÝCH POLOŽEK NA POLE a vybereš ŽÁDNÉ. R.citovat

Strana:  1 2   další »

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