Makro:aktualizace kontingenčích tabulek v celém dokumentu

Makro:aktualizace kontingenčích tabulek v celém dokumentu

Kontingenční tabulka (DATA - Průvodce daty) je šikovný nástroj,který umí zpracovávat velké množství dat ze základní tabulky "databáze".Z jedné tzv.databáze může data zpracovávat více kont.tabulek,ze kterých třeba čerpají informace zase jiné tabulky apod.V celém dokumentu jich můžeme mít calou řadu.Zde,ale narazíme na zásadní problém:kontingenční tabulky budeme muset jednu po druhé aktualizovat (na tabulce pravá myš/obnovit),aby došlo ke zpracování nových dat v databázi.Jelikož často dokumenty s mnoha kot.tabulkami používám,osvědčilo se mi makro,které aktualizuje kont.tabulky najednou v celém dokumentu.Toto makro pak přiřadím k tlačítku (ovládací prvek/události) na hlavním listu.

Po té už měníme jen data v databázích a makrem aktualizujeme všechny na ně napojené kont.tabulky.

 

MAKRO:aktualizace kontingenční tabulky (průvodce daty)

 

 Sub refresh_DBRanges_And_Pilots

    rem ----------------------------------------------------------------------

rem define variables

dim document   as object

dim dispatcher as object

rem ----------------------------------------------------------------------

rem get access to the document

document   = ThisComponent.CurrentController.Frame

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

  rem ----------------------------------------------------------------------

dispatcher.executeDispatch(document, ".uno:CalculateHard", "", 0, Array())

    REM disable auto-calculation:

       bAutoCalc = thisComponent.IsAutomaticCalculationEnabled

       thisComponent.enableAutomaticCalculation(False)

       oDBRangesEnum = thisComponent.DatabaseRanges.createEnumeration()

       refresh_Enumeration(oDBRangesEnum)

       oSheetsEnum = thisComponent.Sheets.createEnumeration()

       refresh_All_DataPilots(oSheetsEnum)

    REM reset auto-calculation to previous state:

       thisComponent.enableAutomaticCalculation(bAutoCalc)

       rem ----------------------------------------------------------------------

dispatcher.executeDispatch(document, ".uno:CalculateHard", "", 0, Array())

    End Sub

 

    Sub refresh_All_DataPilots(oSheetsEnum)

    REM Bug: Disregards pilots created from datasource

       while oSheetsEnum.hasMoreElements()

          oSheet = oSheetsEnum.nextElement()

          oDPEnum = oSheet.DataPilotTables.createEnumeration()

          refresh_Enumeration(oDPEnum)

       wend

    End Sub

 

    Sub refresh_Enumeration(oEnum)

       while oEnum.hasMoreElements()

          oNext = oEnum.nextElement()

          oNext.refresh()

       wend

    End Sub

Diskusní téma: Makro:aktualizace kontingenčích tabulek v celém dokumentu

Nebyly nalezeny žádné příspěvky.

Přidat nový příspěvek