[Risolto]Parametri Listbox

Creare una macro - Scrivere uno script - Usare le API
Rispondi
Flitec
Messaggi: 5
Iscritto il: sabato 10 settembre 2011, 12:56

[Risolto]Parametri Listbox

Messaggio da Flitec »

Buongiorno a tutti,
ho la necessità di impostare i parametri di una listbox mediante una macro.
Spulciando nei forum ho recuperato dei "pezzi" di codice che "composti" ottengono quasi il risultato desiderato.
In particolare il codice allegato è in grado di impostare correttamente il valore della "Cella collegata" e di "Area celle di origine".
A me servirebbe che il campo "Contenuti della cella collegata" fosse impostato a "Posizione della voce selezionata" in realtà viene impostato a "La voce selezionata"
Ho provato ad ispezionare gli oggetti con MRI e Xray nel tentativo di identificare un metodo/proprietà che consentisse di impostare il parametro sopradescritto come richiesto ma senza successo.
Grazie per l'aiuto.

Codice: Seleziona tutto

 Sub FindControl
   
      	Dim oSheet
      	Dim oForm
      	Dim oControlDataModel
      	Dim oControl
      	Dim oService
      	Dim arg(0) as new com.sun.star.beans.NamedValue 'not a PropertyValue, a Named Value.
     	Dim oCellAddress As new com.sun.star.table.CellAddress
      	Dim addr As Object
     	Dim oCellRangeListSource
    	Dim initParam(0) as new com.sun.star.beans.NamedValue
  		Globalscope.BasicLibraries.LoadLibrary("MRILib")
	'	  oMRI = CreateUnoService("mytools.Mri")		  
  			addr = createUnoStruct("com.sun.star.table.CellRangeAddress")
  			addr.StartRow=0
 			addr.EndRow=12
  		  	addr.StartColumn=13
  		  	addr.EndColumn=13
  	  		addr.Sheet=0
  	  		
  	  		initParam(0).Name="CellRange"
  	  		initParam(0).value = addr
  
 	   		oCellRangeListSource=ThisComponent.createInstanceWithArguments("com.sun.star.table.CellRangeListSource", initParam() )
 	   
	
		  	oForm = ThisComponent.DrawPages(0).Forms(0).getByIndex(0)
 			
 			oForm.setListEntrySource(oCellRangeListSource)
		
		    oSheet = ThisComponent.CurrentController.ActiveSheet
      
     
  		    ' Assume there is only one form.
   		   		oForm = oSheet.getDrawPage().getForms().getByIndex(0)
   		   		oControlDataModel = oForm.getByName(oForm.ElementNames(0))
    		
    		    oCellAddress.Column =15
          		oCellAddress.Row=0
          		oCellAddress.Sheet=0
          		arg(0).Name = "BoundCell"
          		arg(0).Value = oCellAddress
          		oService = ThisComponent.createInstanceWithArguments("com.sun.star.table.CellValueBinding", arg)
     '     		oMRI.inspect(oService)
          		oControlDataModel.ValueBinding = oService
          
    
    End Sub
Allegati
listbox.ods
(10.06 KiB) Scaricato 161 volte
Ultima modifica di Flitec il martedì 16 febbraio 2016, 16:04, modificato 1 volta in totale.
Libre Office 5.0.4.2 Windows 7
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Parametri Listbox

Messaggio da Gaetanopr »

Ho dato un'occhiata e credo non si possa impostare da codice, ma hai un motivo in particolare per volerlo fare da macro? si possono trovare altre soluzioni.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Flitec
Messaggi: 5
Iscritto il: sabato 10 settembre 2011, 12:56

Re: Parametri Listbox

Messaggio da Flitec »

Grazie per la risposta,
in realtà no, il problema è che da codice devo importare il foglio di lavoro sul quale risiede la listbox in un'altro woorbook, ho provato ad effettuare questa operazione con diverse alternative recuperate dai forum
https://forum.openoffice.org/en/forum/v ... 03#p367103
utilizzando il dispatcher ed anche l'estensione EasyDev (libreMexico).
Probabilmente a causa di un qualche bug (penso) l'importazione non avviene mai in maniera corretta (normalmente manca il controllo-listbox), i risultati migliori li ho ottenuti con EasyDev che importa correttamente il foglio ed anche i controlli (listbox) in esso contenuti il problema è che comunque relativamente ai controlli perde la parametrizzazione (non vengono correttamente importati).
Per questo motivo pensavo di utilizzare il codice allegato per riparametrizzare correttamente la listbox.
Libre Office 5.0.4.2 Windows 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Parametri Listbox

Messaggio da patel »

però la posizione la puoi ricavare in altro modo, per es con un cerca.verticale
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Parametri Listbox

Messaggio da Gaetanopr »

L'unica soluzione automatica che vedo è assegnare alla listbox una macro che assegni alla cella la posizione e non il contenuto, fin qui tutto abbastanza semplice, unico "problema" dato che la copia avviene su un altro documento è che questa macro dovrà trovarsi pure sul nuovo nuovo documento(cosa fattibile anche via codice) oppure tra me MACRO PERSONALI, si tratta di un documento nuovo o già esistente?.
Quindi a mio avviso la soluzione più semplice è come dice patel usare il Cerca Verticale o ancor meglio la funzione Confronta che restituisce la posizione di un elemento in una matrice di dati, oppure non ti rimane altro che impostare manualmente questa proprietà


Ciao.
Ultima modifica di Gaetanopr il martedì 16 febbraio 2016, 15:57, modificato 1 volta in totale.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Flitec
Messaggi: 5
Iscritto il: sabato 10 settembre 2011, 12:56

Re: Parametri Listbox

Messaggio da Flitec »

Ha perfettamente ragione e probabilmente sarà la strada che dovrò intraprendere, avrei voluto evitare di dover cambiare la struttura del foglio di lavoro, per semplicità ho riproposto un esempio con un foglio di lavoro ed una listbox, in realtà i fogli che possono essere importati sono diverse decine ciascuno con più list box all'interno
Grazie
Libre Office 5.0.4.2 Windows 7
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Parametri Listbox

Messaggio da Gaetanopr »

Allora ti consiglio di usare una macro da mettere tra le macro personali e non del documento, in modo da poterla usare su tutti i documenti.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Flitec
Messaggi: 5
Iscritto il: sabato 10 settembre 2011, 12:56

Re: Parametri Listbox

Messaggio da Flitec »

Grazie a tutti per l'aiuto
Libre Office 5.0.4.2 Windows 7
Rispondi