Strona 1 z 1
Tabela przestawna zakres danych w makro
: pn sty 29, 2018 6:24 pm
autor: szlejk
Witam,
Tworząc tabelę przestawną ręcznie zakres tabeli ustawia się automatycznie, jak to osiągnąć w Basic?
Obecnie zakres jest określany za pomocą
Niestety często dane do tabeli mają zmienny zakres.
Pozdrawiam i dziękuję
Re: Tabela przestawna zakres danych w makro
: pn sty 29, 2018 10:18 pm
autor: belstar
Możliwości masz sporo, ja podpowiem tylko trzy.
1. Nazwany zakres danych, zmieniający się dynamicznie.
2. W bibliotece Tools jest funkcja GetLastUsedRow, wykorzystaj ją
3. Użyj funkcji arkuszowych (np. ILE.NIEPUSTYCH), i na tej podstawie pobierz adres zakresu.
Re: Tabela przestawna zakres danych w makro
: czw lut 01, 2018 1:35 pm
autor: szlejk
Dziękuje za wskazówki, zainteresowała mnie opcja druga tylko jak tego użyć z GetLastUsedRow.
proszę o jakiś przykład
Kod: Zaznacz cały
Sub test()
GlobalScope.BasicLibraries.LoadLibrary("Tools")
end sub
Pozdrawiam
Re: Tabela przestawna zakres danych w makro
: ndz lut 04, 2018 6:03 pm
autor: belstar
Kod: Zaznacz cały
Sub DataPilotTable
Dim oSheet
Dim oRange
Dim oRangeAddress
Dim oTables
Dim oTDescriptor
Dim oAllFields
Dim oField
Dim oCellAddress as new com.sun.star.table.CellAddress
Dim ile
'Sprawdzenie czy biblioteka jest załadowana
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
'Wynik negatywny załaduj bibliotekę
GlobalScope.BasicLibraries.LoadLibrary("Tools")
End If
Arkusze = ThisComponent.Sheets
'Czy arkusz istnieje
'W tym przykładzie dane źródłowe są w arkuszu o nazwi "Dane"
If NOT Arkusze.hasByName("Dane") then
Arkusze.insertNewByName("Dane", Arkusze.getCount())
End If
oSheet = ThisComponent.Sheets.getByName("Dane")
'Wykorzystanie funkcji z biblioteki Tools, wykorzystamy zmienną "ile"
'ile = GetLastUsedRow(oSheet)
'oRange = oSheet.getCellRangeByName("A1:N" & Ile + 1)
'Tu to samo bez dodatkowej zmiennej, można jej deklaracje usunąć - "Dim ile"
oRange = oSheet.getCellRangeByName("A1:N" & GetLastUsedRow(oSheet) + 1)
oRangeAddress = oRange.getRangeAddress()
oCellAddress.Sheet = oRangeAddress.Sheet
oCellAddress.Column = oRangeAddress.StartColumn
oCellAddress.Row = oRangeAddress.EndRow + 2
oTables = oSheet.getDataPilotTables()
' Krok1 Utworzenie descriptora
oTDescriptor = oTables.createDataPilotDescriptor()
' Krok2 Dane źródłowe
oTdescriptor.setSourceRange(oRangeAddress)
' Krok3 ustawienie pól
oAllFields = oTDescriptor.getDataPilotFields()
'Zdefiniuj kolumny
oField = oAllFields.getByIndex(0)
oField.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.ROW
oField = oAllFields.getByIndex(1)
oField.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.COLUMN
oField = oAllFields.getByIndex(3)
oField.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.DATA
oField.Function = com.sun.star.sheet.GeneralFunction.SUM
'Wstaw tabelę przestawną
oTables.insertNewByName("DataPilot", oCellAddress, oTDescriptor)
End Sub
Re: Tabela przestawna zakres danych w makro
: czw kwie 18, 2019 5:01 pm
autor: szlejk
Przepraszam że tak późno, dziękuję za wskazówki i proszę o pomoc. Kod wyświetla mi błąd w załączniku.