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ą

Kod: Zaznacz cały

getCellRangeByName("A1:N200")
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.