vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest sobota, 18 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Automatyczne odświeżanie TAB przestawnej


otwartyotwarty rozpoczął: jarjar postów: 5



napisał: jarjar
postów: 40


umieszczony:
12 maja 2007
23:36

  
OK!
Kapuje.
Dzięki.
Kurcze to VBA zaczyna mi się bardzo podobać(choć mało jeszcze wiem z niego), jest porostu logiczne.
napisał: Rycho
postów: 291


umieszczony:
12 maja 2007
23:01

edytowany:
12 maja 2007
23:04

  
Hej.
Teraz odświeżanie swojej tabeli przestawnej uruchamiasz z procedury obsługi zdarzenia 'Acivate' ('wejście do') arkusza, w której ta tabela jest.

Musisz znależć inne zdarzenie, które w Twoim skoroszycie na pewno wystąpi i uruchomić ten kod (może umieść kod w dodatkowej procedurze i wywołaj ją z procedury obsługującej zdarzenie) - kandydaci:
- otwarcie skoroszytu - zdarzenie Workbook_Open w module ThisWorkbook,
- po dopisaniu danych - zdarzenie Worksheet_Deactivate w module arkusza z danymi,
- 'wejscie' do innego arkusza - Worksheet_Activate,
- przeliczanie jakiegoś arkusza - Worksheet_Calculate - to może być niepotrzebnie wywoływane za często.

Nie piszesz co aktualizuje dane do tabeli przestawnej. Może makro aktualizujące wywołać po zmianie tych danych?

Możesz też procedurę przypisać do przycisku, który umieścisz na jakimś arkuszu.
pzdr Rycho

Edit:
No tak :( Ja jakby kontynuję wątek a pytanie było zadane w nowym. Nie będę przepisywał.
napisał: jarjar
postów: 40


umieszczony:
10 maja 2007
22:28

  
musiałem usunąć jedną linijkę i kropkę i zaskoczyło:

Private Sub Worksheet_Activate()

Dim mysheet As Worksheet
Dim myRangeAddress As String
Dim myPivotTable As PivotTable

Application.ScreenUpdating = False

'definiujemy w którym arkuszu sa dane źródłowe
Set mysheet = Sheets("Arkusz1")

'przypisujemy adres zakresu w jakim są dane źródłowe
'(przy założeniu, że komórka A1 znajduje się w zakresie danych źródłowych)
myRangeAddress = mysheet.Name & "!" & _
mysheet.Range("A2:B9").CurrentRegion.Address(ReferenceStyle:=xlR1C1)

Set myPivotTable = ActiveSheet.PivotTables(1)
With myPivotTable.PivotCache
'przypisujemy zakres danych źródłowych tabeli przestawnej
SourceData = myRangeAddress

'odświeżamy bufor tabeli przestawnej
.Refresh
End With

'ukrywamy paski narzędzi związanych z tabelą przestawną

Application.CommandBars("PivotTable").Visible = False

Application.ScreenUpdating = True

End Sub
arkusz VBA sie nie pluje ale muszę jeszcze sprawdzić czy wszystko poprawnie z tab przest.
Dzięki i pozdrawiam czytających posty.
napisał: Rycho
postów: 291


umieszczony:
9 maja 2007
23:17

  
Witam.
Przetestuj kod:
Private Sub Worksheet_Activate()

    Dim mysheet As Worksheet
    Dim myRangeAddress As String
    Dim myPivotTable As PivotTable

    Application.ScreenUpdating = False

    'definiujemy w którym arkuszu sa dane źródłowe
    Set mysheet = Sheets("Arkusz1")

    'przypisujemy adres zakresu w jakim są dane źródłowe
    '(przy założeniu, że komórka A1 znajduje się w zakresie danych źródłowych)
    myRangeAddress = mysheet.Name & "!" & _
        mysheet.Range("A1").CurrentRegion.Address(ReferenceStyle:=xlR1C1)

    Set myPivotTable = ActiveSheet.PivotTables(1)
    With myPivotTable.PivotCache
        'przypisujemy zakres danych źródłowych tabeli przestawnej
        .SourceData = myRangeAddress

        'odświeżamy bufor tabeli przestawnej
        .Refresh
    End With
    
    'ukrywamy paski narzędzi związanych z tabelą przestawną
    ActiveWorkbook.ShowPivotTableFieldList = False
    Application.CommandBars("PivotTable").Visible = False

    Application.ScreenUpdating = True

End Sub


Pzdr
napisał: jarjar
postów: 40


umieszczony:
9 maja 2007
18:46

  
Witam serdecznie.
Mam dane w tabelce:A2:B9 w ark1. w ark2 tabela1 "przestawna"(A1).
Chcę aby po zmianie wartości w jakiejkolwiek komórce z danymi automatycznie odświeżała się tabela przestawna w 2 arkuszu.
Skorzystałem z codu:
Private Sub Worksheet_Activate()

Dim mysheet As Worksheet
'definiujemy w którym arkuszu sa dane źródłowe
Set mysheet = Sheets("Arkusz1")

Application.ScreenUpdating = False

'przypisujemy adres zakresu w jakim są dane źródłowe
'(przy założeniu, że komórka A1 znajduje się w zakresie danych źródłowych)
myrange = mysheet.Name & "!" & _
mysheet.Range("A2:B9").CurrentRegion.Address(ReferenceStyle:=xlA2B9)

'przypisujemy zakres danych źródłowych tabeli przestawnej
ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:=myrange

'odświeżamy tabelę przestawną
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh

'ukrywamy paski narzędzi związanych z tabelą przestawną
ActiveWorkbook.ShowPivotTableFieldList = False
Application.CommandBars("PivotTable").Visible = False

Application.ScreenUpdating = True

End Sub
Ale niestety w:
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
wyskakuje mi :"Run-time error '1004' Pobranie właściwości Pivot Tables klasy Worksheet nie jest możliwe"
Co jest źle?
Nie kumam
Prosze o pomoc i wyrozumiałość (początki VBA)
PZDR


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z