Problema macro dopo aggiornamento libreoffice

Creare una macro - Scrivere uno script - Usare le API
Rispondi
Luka2017
Messaggi: 69
Iscritto il: giovedì 16 febbraio 2017, 11:59

Problema macro dopo aggiornamento libreoffice

Messaggio da Luka2017 »

Buonasera, a seguito di un aggiornamento della versione libreoffice 24.8.2.1 il programma mi da errore sulla seguente formula

Codice: Seleziona tutto

Sub Search_RETT_INV3
Dim LB
Dim oCell
Dim oFilterDesc
Dim oTextBox
Dim oFields(0) As New com.sun.star.sheet.TableFilterField2
Sheet = ThisComponent.Sheets(1)
oTextBox = oDialogo2.getControl("ComboBox4")
LB = oDialogo2.getControl("ListBox1")
LB.removeItems(0,LB.getItemCount())
Daric = UCase(oTextBox.Text)
c = Sheet.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 1
CellRange = Sheet.getCellRangeByName("E1:E" & LastRow)
oFilterDesc = CellRange.createFilterDescriptor(True)
 With oFields(0)
     .Field = 0
     .Operator = com.sun.star.sheet.FilterOperator2.BEGINS_WITH
     .StringValue = Daric 
 End With
oFilterDesc = CellRange.createFilterDescriptor(True)
With oFilterDesc
    .ContainsHeader = False
    .CopyOutputData = False
    .FilterFields2 = oFields()    
End With    
CellRange.filter(oFilterDesc)
ranges = CellRange.queryVisibleCells()
If Ubound(ranges.RowDescriptions) > -1 Then 
  ReDim Arr(0 To Ubound(ranges.RowDescriptions))
  Dim a(0 To Ubound(ranges.RowDescriptions))
  For Each oCell in ranges.Cells
        Arr(x) = oCell.CellAddress.Row 
      a(x) = oCell.DataArray(0)
      x = x +1
 Next 
 Dati = a
svc = createUnoService("com.sun.star.sheet.FunctionAccess")
 Dati1 =  svc.callFunction("TRANSPOSE", Array(a))
   LB.getModel.StringItemList = Dati1(0)
End If
  'Call RemoveSheetFilter2()
End sub
nella riga

Codice: Seleziona tutto

 Dati1 =  svc.callFunction("TRANSPOSE", Array(a))
"Errore runtime Illaegal argument."

Mi potreste aiutare?
e seconfo voi può essere legato all'hardware installato nel pc.

Grazie Mille

Luca
nickGiard
Messaggi: 85
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Problema macro dopo aggiornamento libreoffice

Messaggio da nickGiard »

Ciao Luka2017
permettimi un consiglio quando devi trovare un bug: devi isolare il codice con le sole istruzioni pertinenti, e testare con valori creati anche manualmente e vedere il comportamento ed i valori nella finestra debug.
Per farla breve tu hai bisogno della sola variabile a , che risulta un Array di Variant String o Double o "", il cui indice è x.
Ma non vedo cos'è x e soprattutto come è inizializzato. Quindi nel debug devi controllare cosa risulta per la variabile x, e se è un intero come ti aspetti.
Altra considerazione e che la variabile a è un array di array essendo oCell.DataArray(0) un Array. Guardando le API di callFunction() richiede tra gli altri in parametro any[][], che dovrebbe essere invece una matrice Array a due dimensioni.
A dire il vero sulla mia versione 7 di LO funziona anche l' Array(Array)) ma può essere che con il progredire delle versioni sia stato reso più stringente il controllo dei parametri delle funzioni.
Facci sapere
Nicola
Nicola con LibreOffice 7.1 (x64) su Windows 11
Rispondi