Filter Macro

Brugerhjælp og support til regneark i LibreOffice Calc

Moderator: Lodahl

Post Reply
Prask
Posts: 5
Joined: 3. Nov 2010 16:02
Location: 6940

Filter Macro

Post by Prask »

Hej

Mangler lidt hjælp..... jeg har fundet et Macro kode eksempel på nettet som jeg har tilrettet lidt

Jeg bruger Advanced filter
Mine data der skal filtreres står i sheet1 A1:C7
Kriteriet står i sheet1 E1:E2
Resultat skal kopieres til sheet 2


Det eneste der sker er at Calc går ned, Hvor er fejlen ?????

Code: Select all

sub resultat ()


  Dim oSheet     'A sheet from the Calc document.
  Dim oRanges    'The NamedRanges property.
  Dim oCritRange 'Range that contains the filter criteria.
  Dim oDataRange 'Range that contains the data to filter.
  Dim oFiltDesc  'Filter descriptor.
 
  REM Range that contains the filter criteria
  oSheet = ThisComponent.getSheets().getByIndex(1)
 oCritRange = oSheet.getCellRangeByName("E1:E2")

 
  REM The data that I want to filter
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oDataRange = oSheet.getCellRangeByName("A1:C7")
 
  oFiltDesc = oCritRange.createFilterDescriptorByObject(oDataRange)
  oDataRange.filter(oFiltDesc)
  
  REM Copy the output data rather than filter in place.  
  oFiltDesc.CopyOutputData = True
 
  REM Create a CellAddress and set it for Sheet3,
  REM Column B, Row 4 (remember, start counting with 0)
  Dim x As New com.sun.star.table.CellAddress
  x.Sheet = 2
  x.Column = 1
  x.Row = 3
  oFiltDesc.OutputPosition = x

  
  
End Sub
Jens S
Posts: 1091
Joined: 25. Mar 2007 22:42

Post by Jens S »

Du har 2 objekter med samme navn 'oSheet' , ret den ene. Flyt linjen:
oDataRange.filter(oFiltDesc)
til slut af makroen (lige før End Sub)

mvh
Jens
Prask
Posts: 5
Joined: 3. Nov 2010 16:02
Location: 6940

Post by Prask »

Hej

Nu ser koden sådan ud :

Code: Select all

sub resultat ()


  Dim oSheet     'A sheet from the Calc document.
  Dim oSheetcri     'A sheet from the Calc document.
  Dim oRanges    'The NamedRanges property.
  Dim oCritRange 'Range that contains the filter criteria.
  Dim oDataRange 'Range that contains the data to filter.
  Dim oFiltDesc  'Filter descriptor.
 
  REM Range that contains the filter criteria
  oSheetcri = ThisComponent.getSheets().getByIndex(1)
 oCritRange = oSheetcri.getCellRangeByName("E1:E2")

 
  REM The data that I want to filter
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oDataRange = oSheet.getCellRangeByName("A1:C7")
 
  oFiltDesc = oCritRange.createFilterDescriptorByObject(oDataRange)
 

  REM Copy the output data rather than filter in place.  
  oFiltDesc.CopyOutputData = True
 
  REM Create a CellAddress and set it for Sheet3,
  REM Column B, Row 4 (remember, start counting with 0)
  Dim x As New com.sun.star.table.CellAddress
  x.Sheet = 2
  x.Column = 1
  x.Row = 3
  oFiltDesc.OutputPosition = x
  
    oDataRange.filter(oFiltDesc)
  
   

  
  
End Sub

Men det giver fejlen objektvariablen kunne ikke init.. i linien
oFiltDesc.CopyOutputData = True

Flytter jeg linien oDataRange.filter(oFiltDesc)
op over oFiltDesc.CopyOutputData = True

så dør OO bare

vh
peter
Jens S
Posts: 1091
Joined: 25. Mar 2007 22:42

Post by Jens S »

Umiddelbart kan jeg ikke se fejl, og det virker her. Hvis den ikke kan initiere
'oFiltDesc.CopyOutputData = True' vil den foretage filtreringen i hovedtabellen på ark1 (Filtrerer du på en allerede filtreret tabel?)
' oDataRange.filter(oFiltDesc)' skal stå efter alle parametrene er defineret.
Se mit eksempel http://dl.dropbox.com/u/2601866/standar ... 0makro.ods

mvh
Jens
Prask
Posts: 5
Joined: 3. Nov 2010 16:02
Location: 6940

Post by Prask »

Hej Jens

Tak for din tålmodighed.
Jeg har downloadet dit eksempel, og det kører, nu tror jeg jeg ved at fatte syntaksen

vh

Peter
Post Reply