Calc - Macro per popolare Combobox

Creare una macro - Scrivere uno script - Usare le API
Rispondi
geovign
Messaggi: 216
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Calc - Macro per popolare Combobox

Messaggio da geovign »

Un saluto al forum.
Sto perfezionando il mio progetto del quaderno di campagna ed avrei necessità di un vs. consiglio.
Caso: nella colonna A (0) sono presenti celle con stringhe di testo a due o tre caratteri, es. AB,AB1
Problema: popolare la combobox con le stringhe di testo costituite da solo due caratteri.
Mia soluzione: ho scritto una macro, regolarmente funzionante, così strutturata

Codice: Seleziona tutto

sub riempicombobox6
	Dim Doc
	Dim Sheet
	Dim oCell
	Dim a As String
	Dim LastRow as Long
	Doc = ThisComponent
	Sheet=Doc.Sheets.getByName("Fertilizzazioni")
	oComboBox6.removeItems("Fertilizzazioni",oComboBox6.getItemCount())
	LastRow = LastRowInColonna(Sheet,0) 
rem ciclo per caricare la combobox con i codici composti da solo due lettere
    dim oFunction as variant
    dim aArgument(0) as variant
	For i=4 to LastRow +1
		oCell = Sheet.getCellByPosition(0, i)
		a = oCell.String
		oFunction = createUnoService("com.sun.star.sheet.FunctionAccess")
		aArgument(0) = a
		Num_Car = oFunction.callFunction("LEN",aArgument())			
		if Num_Car = 2 AND a <> "" then 
			oComboBox6.addItem(a, dlg.getControl("ComboBox6").ItemCount) 
		end if
	next i
End sub
dove, all'interno del ciclo for/next, utilizzo la funzione "LEN" (Lunghezza) per scegliere solo le stringhe di testo a due caratteri.
Richiesta: E' possibile scrivere il ciclo for/next senza l'ausilio della funzione "LEN" ? O meglio, esiste un altro modo di impostare la macro?
Grazie.
Geo
LibO 7 su LinuxMint 21
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Calc - Macro per popolare Combobox

Messaggio da Gaetanopr »

Per prima cosa non hai bisogno di ricorrere alla FunctionAccess, seconda cosa non è necessario verificare se la stringa è vuota

Codice: Seleziona tutto

if Num_Car = 2 AND a <> "" then 
in quanto se rispetta la lunghezza di 2 caratteri di sicuro non sarà vuota.

Codice: Seleziona tutto

sub riempicombobox6
   Dim Doc
   Dim Sheet
   Dim oCell
   Dim a As String
   Dim LastRow as Long
   Doc = ThisComponent
   Sheet=Doc.Sheets.getByName("Fertilizzazioni")
   oComboBox6.removeItems("Fertilizzazioni",oComboBox6.getItemCount())
   LastRow = LastRowInColonna(Sheet,0) 
rem ciclo per caricare la combobox con i codici composti da solo due lettere
    For i=4 to LastRow +1
      a = Sheet.getCellByPosition(0, i).String
      if LEN(a) = 2 then 
         oComboBox6.addItem(a, dlg.getControl("ComboBox6").ItemCount) 
      end if
   next i
End sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
geovign
Messaggi: 216
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Calc - Macro per popolare Combobox

Messaggio da geovign »

Ciao Gaetanopr,
dunque:
- verifica stringa vuota: refuso??? no copia ed incolla senza ragionarci sopra. Hai ragione, presupponendo che tutte le celle della colonna siano piene (considerazione generica che non riguarda il mio caso specifico)
- non avevo idea che si potesse utilizzare LEN anche senza FunctionAccess .
Tutte le funzioni matematiche si possono utilizzare senza FunctionAccess? Ho avuto necessità di adoperare SUM e COUNTIF ma sempre FunctionAccess, avrei potuto anche senza?
Saluti
Geo
LibO 7 su LinuxMint 21
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Calc - Macro per popolare Combobox

Messaggio da Gaetanopr »

Non tutte ad esempio countif non esiste, ci sono molte funzioni di testo come right, Left, mid, Len.
Per la maggior parte devi accedere tramite FunctionAccess.

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
geovign
Messaggi: 216
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Calc - Macro per popolare Combobox

Messaggio da geovign »

Ok.
Grazie
Geo
LibO 7 su LinuxMint 21
Rispondi