Pagina 1 di 1

Problema macro dopo aggiornamento libreoffice

Inviato: venerdì 4 ottobre 2024, 19:05
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

Re: Problema macro dopo aggiornamento libreoffice

Inviato: sabato 12 ottobre 2024, 14:29
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