[Risolto] Comparazione prodotti in maschera di dialogo

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

[Risolto] Comparazione prodotti in maschera di dialogo

Messaggio da sanraff »

Buon pomeriggio a tutti, nel progetto che sto realizzando, di cui allego file, mi sono imbattuto in un problema che non riesco a risolvere nonostante abbia fatto delle ricerche su google e sul forum per capire se potevo trovare una soluzione idonea al mio caso.

Mi spiego;
Premendo sul pulsante "Avvio Filtro", si apre una maschera di dialogo dove all'interno dei riquadri "Anagrafica Cliente e Descrittiva" sono riportati tutti i dati posti nella tabella di "Calc".
Adesso tramite la casella "Categoria", riesco a filtrare i dati espressi nella colonna "Descrizione", esempio, se scrivo "Armadio", mi filtra i dati per la voce "Armadio", se metto "Cucina", idem come prima ecc...

Quello che non so fare e scopo dell'aiuto, è quello che una volta filtrato il nome attraverso la casella "Categoria", tramite i tre "OptionButton" devo filtrare un'ulteriore corrispondenza del dato, per la parola "Conveniente", "Prezzo Alto" e "Verifica".

Esempio: se scrivo nella casella "Categoria" la parola "Tavolo", attualmente nel riquadro "Descrittiva" mi riporta tutti i dati filtrati per questa parola, adesso se schiaccio su uno dei tre bottoni, sempre nel riquadro "Descrittiva" e per la categoria già trovata, vorrei vedere quelli appartenenti al bottone scelto, quindi per la categoria "Tavolo" e pulsante "Conveniente", tutti i dati ad esso associati e così via.

Spero di esser stato chiaro e sarebbe possibile capire come si fa??

Un grazie in anticipo a chi mi darà una mano.
Allegati
Comparazione Prodotti.ods
(24.77 KiB) Scaricato 173 volte
Ultima modifica di sanraff il giovedì 29 giugno 2017, 22:26, modificato 1 volta in totale.
OpenOffice 3.3 SU WINDOWS 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Comparazione prodotti in maschera di dialogo

Messaggio da patel »

il modo più semplice a mio parere è selezionare subito l'optionbutton desiderato e poi digitare nella textbox.
Nella listfill controlli oltre al resto che il campo Verificare sia quello prescelto
-------------------
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
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Comparazione prodotti in maschera di dialogo

Messaggio da sanraff »

Buonasera patel, fammi capire meglio, mi stai dicendo che nella sub "lisfill" devo prima inserire un ciclo "If" per la selezione del bottone, dopodiché deve avvenire il resto del programma?.

Se invece ho interpretato male le tue parole, potresti spiegarti meglio, grazie.
OpenOffice 3.3 SU WINDOWS 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Comparazione prodotti in maschera di dialogo

Messaggio da patel »

if non è un ciclo ma una condizione, i cicli sono for-next, do-loop, while-wend ecc.
quello che intendo è:
1) interrogare gli optionbutton per vedere quale è stato attivato
2) nell'IF che popola la listbox inserire anche la condizione relativa alla verifica
In aggiunta potresti anche per ogni optionbutton assegnare all'evento Stato Modificato la sub listfill modificata come sopra, in questo caso la variabile Daric deve prendere non da source ma da TextField1 perché il source dell'optionbutton non contiene la lettera che serve per il filtro.

Codice: Seleziona tutto

Daric = ucase(Dlg.getControl("TextField1").Text)
Così facendo puoi attivare le opzioni anche dopo aver filtrato per prodotto.
-------------------
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
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Comparazione prodotti in maschera di dialogo

Messaggio da sanraff »

Tentando di interpretare il tuo consiglio, ho provato a scrivere due sub, uno con il controllo degli "OptionButton" e l'altro tramite "Listbox1", chiaramente non avendo alcuna base informatica non mi funziona niente, se ti va e lungi da me il pensiero di volerti in continuazione romperti le scatole, puoi gentilmente con un esempio funzionante spiegarmi dove sbaglio??, grazie

Codice: Seleziona tutto

sub SceltaBottone         ' controllo tramite optionbutton
Dim Conveniente as string
Dim PrezzoAlto as string
Dim Verificare as string

	Conveniente = Dlg.getControl("OptionButton1").state
	PrezzoAlto = Dlg.getControl("OptionButton2").state
	Verificare = Dlg.getControl("OptionButton3").state
	
	If dlg.getControl("OptionButton1").state = True Then
		datamodel.addRows(dimarray(ubound(Dati)), (Dati))
		datamodel2.addRows(dimarray(ubound(Dati2)), Dati2) 'controllo sulla seconda tabella
	else
		datamodel.removeAllRows()
		datamodel2.removeAllRows() 'controllo sulla seconda tabella
		Daric = ucase(Dlg.getControl("TextField1").Text)
		dim rows(), rows2()
		dim datan as string
		x = - 1
		for r = 0 to ubound(Dati)
			if ucase(left(Dati2(r)(9) & " " & Dati(r)(1) & " " & Dati(r)(2), len(Daric))) = Daric then 
            x = ubound(rows) + 1 
				redim preserve rows(x)
				redim preserve rows2(x) 'controllo sulla seconda tabella
				rows(x) = Dati(r)
				rows2(x) = Dati2(r) 'controllo sulla seconda tabella
			end if
		next r
		' così è molto più veloce
		if x >= 0 then  
 			datamodel.addRows(dimarray(x), rows)
			datamodel2.addRows(dimarray(x), rows2) 'controllo sulla seconda tabella
        end if
	end if
End sub

Codice: Seleziona tutto

sub listfil(optional event)   ' controllo tramite ListBox
  if ismissing(event) then
    	datamodel.addRows(dimarray(ubound(Dati)), (Dati))
	datamodel2.addRows(dimarray(ubound(Dati2)), Dati2) 'controllo sulla seconda tabella
  else
		datamodel.removeAllRows()
		datamodel2.removeAllRows() 'controllo sulla seconda tabella
            Daric = Dlg.getControl("ListBox1").selectedItem
		dim rows(), rows2()
		dim datan as string
		x = - 1
		for r = 0 to ubound(Dati)
         if ucase(left(Dati2(r)(9) & " " & Dati(r)(1) & " " & Dati(r)(3), len(Daric))) = Daric then 
            x = ubound(rows) + 1 
				redim preserve rows(x)
				redim preserve rows2(x) 'controllo sulla seconda tabella
				rows(x) = Dati(r)
				rows2(x) = Dati2(r) 'controllo sulla seconda tabella
			end if
		next r
		' così è molto più veloce
		if x >= 0 then  
 			datamodel.addRows(dimarray(x), rows)
			datamodel2.addRows(dimarray(x), rows2) 'controllo sulla seconda tabella
        end if
   end if
End sub
OpenOffice 3.3 SU WINDOWS 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Comparazione prodotti in maschera di dialogo

Messaggio da patel »

Sei sulla buona strada, ma devi inserire i controlli degli optionbutton nella listfill come ti avevo già detto

Codice: Seleziona tutto

sub listfill(optional event)
	if ismissing(event) then
		datamodel.addRows(dimarray(ubound(Dati)), (Dati))
		datamodel2.addRows(dimarray(ubound(Dati2)), Dati2) 'controllo sulla seconda tabella
	else
    	verifica=""
 	    if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
 	    if Dlg.getControl("OptionButton3").state = true then verifica = "Verificare"
 	    if Dlg.getControl("OptionButton2").state = true then verifica = "Prezzo Alto"
		datamodel.removeAllRows()
		datamodel2.removeAllRows() 'controllo sulla seconda tabella
'		Daric = ucase(event.Source.Text)
		Daric = ucase(Dlg.getControl("TextField1").Text)
		dim rows(), rows2()
		dim datan as string
		x = - 1
		for r = 0 to ubound(Dati)
            if  verifica = "" then ' nessun optionB attivato1
               v=Dati2(r)(9)
            else 
               v=verifica 
            end if
	    if ucase(left(Dati2(r)(1) & " " & Dati(r)(1) & " " & Dati(r)(2), len(Daric))) = Daric and Dati2(r)(9) = v then ' aggiunta verifica optionB
            x = ubound(rows) + 1 
				redim preserve rows(x)
				redim preserve rows2(x) 'controllo sulla seconda tabella
				rows(x) = Dati(r)
				rows2(x) = Dati2(r) 'controllo sulla seconda tabella
			end if
		next r
		' così è molto più veloce
-------------------
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
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Comparazione prodotti in maschera di dialogo

Messaggio da sanraff »

Andando avanti nell'ascoltare i tuoi consigli, sono riuscito a ricavare anche la stringa di comando per gestire il filtro tramite una "listBox", cioè ho sostituito

Codice: Seleziona tutto

if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
con questa

Codice: Seleziona tutto

if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
la quale funziona, anche se non so se è corretta scriverla così.

Volendo adesso cancellare il contenuto posto all'interno della "ListBox" per eseguire una nuova ricerca tramite il pulsante preposto "Nuova Ricerca", ho scritto questa stringa:

Codice: Seleziona tutto

Dlg.getControl("ListBox1").selecteditem = removeselecteditem
però il sistema mi restituisce il messaggio "La Proprietà è di sola lettura" e blocca tutto.

Puoi per piacere spiegarmi come risolvere la cosa?, grazie
OpenOffice 3.3 SU WINDOWS 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Comparazione prodotti in maschera di dialogo

Messaggio da patel »

cosa c'entra la listbox ? abbiamo parlato fino a poco fa di optionbutton
-------------------
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
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Comparazione prodotti in maschera di dialogo

Messaggio da sanraff »

patel ha scritto:cosa c'entra la listbox ? abbiamo parlato fino a poco fa di optionbutton
ciao patel a dire il vero l'avevo citata nel precedente post, infatti avevo riportato una sub sia per l'optionbutton che per la listBox
sanraff ha scritto:Tentando di interpretare il tuo consiglio, ho provato a scrivere due sub, uno con il controllo degli "OptionButton" e l'altro tramite "Listbox1", chiaramente non avendo alcuna base informatica non mi funziona niente, se ti va e lungi da me il pensiero di volerti in continuazione romperti le scatole, puoi gentilmente con un esempio funzionante spiegarmi dove sbaglio??, grazie
forse ti era sfuggita questa cosa, ma io stavo provando a fare entrambi le cose ed avendomi spiegato il funzionamento sugli optionbutton, mi sono dedicato alla "ListBox", infatti ti ho riscritto dicendoti:
sanraff ha scritto:Andando avanti nell'ascoltare i tuoi consigli, sono riuscito a ricavare anche la stringa di comando per gestire il filtro tramite una "listBox", cioè ho sostituito

Codice: Seleziona tutto

    if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
con questa

Codice: Seleziona tutto

    if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
la quale funziona, anche se non so se è corretta scriverla così.
Adesso però volendo cancellare il contenuto posto all'interno della "ListBox" per eseguire una nuova ricerca tramite il pulsante preposto "Nuova Ricerca", ho scritto questa stringa:

Codice: Seleziona tutto

    Dlg.getControl("ListBox1").selecteditem = removeselecteditem
però il sistema mi restituisce il messaggio "La Proprietà è di sola lettura" e blocca tutto.
.

Puoi per piacere spiegarmi come risolvere la cosa?, grazie
OpenOffice 3.3 SU WINDOWS 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Comparazione prodotti in maschera di dialogo

Messaggio da patel »

patel ha scritto:Sei sulla buona strada, ma devi inserire i controlli degli optionbutton nella listfill come ti avevo già detto

Codice: Seleziona tutto

sub listfill(optional event)
	if ismissing(event) then
		datamodel.addRows(dimarray(ubound(Dati)), (Dati))
		datamodel2.addRows(dimarray(ubound(Dati2)), Dati2) 'controllo sulla seconda tabella
	else
    	verifica=""
 	    if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
 	    if Dlg.getControl("OptionButton3").state = true then verifica = "Verificare"
 	    if Dlg.getControl("OptionButton2").state = true then verifica = "Prezzo Alto"
		datamodel.removeAllRows()
		datamodel2.removeAllRows() 'controllo sulla seconda tabella
'		Daric = ucase(event.Source.Text)
		Daric = ucase(Dlg.getControl("TextField1").Text)
		dim rows(), rows2()
		dim datan as string
		x = - 1
		for r = 0 to ubound(Dati)
            if  verifica = "" then ' nessun optionB attivato1
               v=Dati2(r)(9)
            else 
               v=verifica 
            end if
	    if ucase(left(Dati2(r)(1) & " " & Dati(r)(1) & " " & Dati(r)(2), len(Daric))) = Daric and Dati2(r)(9) = v then ' aggiunta verifica optionB
            x = ubound(rows) + 1 
				redim preserve rows(x)
				redim preserve rows2(x) 'controllo sulla seconda tabella
				rows(x) = Dati(r)
				rows2(x) = Dati2(r) 'controllo sulla seconda tabella
			end if
		next r
		' così è molto più veloce
mi sembra di averlo fatto in questo post, ti ho dato un pezzo di codice da sostituire al tuo nella listfill, questo risolve il problema.
-------------------
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
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Comparazione prodotti in maschera di dialogo

Messaggio da sanraff »

patel ha scritto:mi sembra di averlo fatto in questo post, ti ho dato un pezzo di codice da sostituire al tuo nella listfill, questo risolve il problema.
Certo che l'hai fatto e nessuno dice il contrario, infatti per gli "optionbutton" funziona.

Poi però ho cercato di spiegarti che:
sanraff ha scritto:Andando avanti nell'ascoltare i tuoi consigli, sono riuscito a ricavare anche la stringa di comando per gestire il filtro tramite una "listBox", cioè ho sostituito

Codice: Seleziona tutto

if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
con questa

Codice: Seleziona tutto

if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
la quale funziona, anche se non so se è corretta scriverla così.
..... e quindi ti chiedevo un consiglio per capire se andava scritta realmente così.

Poi facendo test, mi sono accorto che mancava qualcosa e ti comunicavo che:
sanraff ha scritto:Volendo adesso cancellare il contenuto posto all'interno della "ListBox" per eseguire una nuova ricerca tramite il pulsante preposto "Nuova Ricerca", ho scritto questa stringa:

Codice: Seleziona tutto

Dlg.getControl("ListBox1").selecteditem = removeselecteditem
però il sistema mi restituisce il messaggio "La Proprietà è di sola lettura" e blocca tutto.
Puoi per piacere spiegarmi come risolvere la cosa?, grazie
...... quindi ti chiedevo un ulteriore aiuto per capire come scrivere correttamente la stringa di comando.

Spero di aver fatto un pò di chiarezza, ... ancora grazie per il tuo contributo.
OpenOffice 3.3 SU WINDOWS 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Comparazione prodotti in maschera di dialogo

Messaggio da patel »

quindi ora al posto degli optionbutton usi una listbox ? se è così allega il file aggiornato
-------------------
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
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Comparazione prodotti in maschera di dialogo

Messaggio da sanraff »

patel ha scritto:quindi ora al posto degli optionbutton usi una listbox ? se è così allega il file aggiornato
Non al posto degli OptionButton, ma come avevo spiegato nel mio terzo post, stavo cercando di imparare entrambe le soluzioni:
sanraff ha scritto:Tentando di interpretare il tuo consiglio, ho provato a scrivere due sub, uno con il controllo degli "OptionButton" e l'altro tramite "Listbox1", chiaramente non avendo alcuna base informatica non mi funziona niente, se ti va e lungi da me il pensiero di volerti in continuazione romperti le scatole, puoi gentilmente con un esempio funzionante spiegarmi dove sbaglio??, grazie
... solo che tu mi hai proposto solo quella inerente all'OptionButton, da cui ho trovato lo spunto per realizzare la sub per far funzionare anche quella inerente alla ListBox1 e nei post successivi ti chiedevo semplicemente di verificare solo due cose prima di scrivere "Risolto", cioè:
1)
sanraff ha scritto:Andando avanti nell'ascoltare i tuoi consigli, sono riuscito a ricavare anche la stringa di comando per gestire il filtro tramite una "listBox", cioè ho sostituito

Codice: Seleziona tutto

    if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
con questa

Codice: Seleziona tutto

    if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
la quale funziona, anche se non so se andava effettivamente scritta così.
2)
sanraff ha scritto:Volendo adesso cancellare il contenuto posto all'interno della "ListBox" per eseguire una nuova ricerca tramite il pulsante preposto "Nuova Ricerca", ho scritto questa stringa:

Codice: Seleziona tutto

    Dlg.getControl("ListBox1").selecteditem = removeselecteditem
però il sistema mi restituisce il messaggio "La Proprietà è di sola lettura" e blocca tutto.
Adesso, al di là del file allegato a me occorrerebbe capire soprattutto come risolvere il punto 2, la sub dove ho il problema si chiama "NuovaRicerca"; poiché per quanto riguarda il punto 1 devi solo dirmi se la sintassi è corretta oppure no, in quanto tutto sommato la macro funziona.

Un'ultima cosa, facendo test ho notato che quando scrivo nella casella "Categoria" il soggetto da filtrare, a volte e non sempre il programma tenta di bloccarsi, le scritte poste nella tabella iniziano a tremare velocemente e poi mi apre la pagina della macro e si posiziona a caso su una riga come volesse indicarmi che c'è un errore che poi errori non c'è ne sono, cioè entra in una sorta di non stabilità.

Spero di esser stato chiaro e grazie per il tuo contributo.
Allegati
Comparazione Prodotti con ListBox.ods
(27.78 KiB) Scaricato 155 volte
OpenOffice 3.3 SU WINDOWS 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Comparazione prodotti in maschera di dialogo

Messaggio da patel »

sanraff ha scritto:
patel ha scritto: ... solo che tu mi hai proposto solo quella inerente all'OptionButton, d.....
non è così, la soluzione che ti ho proposto accetta ambedue i filtri, a questo punto te lo allego io il file
Allegati
ListboxMultiFiltrata_Option.ods
(28.69 KiB) Scaricato 149 volte
-------------------
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
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Comparazione prodotti in maschera di dialogo

Messaggio da sanraff »

Ciao patel, ho visto il tuo ultimo file e la macro corrispondente, però a questo punto due sono le cose, o hai sbagliato a caricare il file oppure non riesco a spiegarmi io, perchè non è conforme a quello che sto tentando di spiegarti in questi ultimi post.
Ripartiamo da capo tentando di fare una volta per tutte chiarezza.
In un mio progetto volevo imparare a filtrare i dati sia con l'uso dell'optionbutton che con la casella di riepilogo "ListBox1", all'inizio mi hai risposto proponendomi una parte del codice inerente all'optionbutton, che io l'ho adattato alle mie esigenze ed ha funzionato come volevo io.

Adesso volendo imparare a fare la stessa cosa con una casella di riepilogo "ListBox1", ho preso spunto da quel codice, modificando una stringa di comando cioè:

Codice: Seleziona tutto

if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
l'ho modificata così

Codice: Seleziona tutto

if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
che fuziona, ed inerente ad essa ti chiedevo un parere tecnico per capire se la sintassi era corretta oppure andava scritta in un altro modo ed a questa mia domanda non mi hai mai risposto.

Poi facendo test sul mio lavoro, mi sono accorto che al progetto mancava una cosa cioè:
sanraff ha scritto:Volendo adesso cancellare il contenuto posto all'interno della casella di riepilogo "ListBox1" per eseguire una nuova ricerca tramite il pulsante preposto "Nuova Ricerca", ho scritto questa stringa:

Codice: Seleziona tutto

   Dlg.getControl("ListBox1").selecteditem = removeselecteditem
però il sistema mi restituisce il messaggio "La Proprietà è di sola lettura" e blocca tutto.

ed anche a questa mia richiesta non mi hai mai risposto, quindi in definitiva, in questi post, stavo chiedendo un aiuto per risolvere quet'ultimo inconveniente.

Spero di esser stato chiaro più del solito, riallego il mio progetto e ti chiedo gentilmente di aprirlo e fare test, dove potrai notare che al posto degli optionbutton adesso c'è una casella di riepilogo rappresentata con un'etichetta che ho chiamato "Filtra per Scelta" , che se fai girare il programma noterai che quando schiaccerai sul pulsante "Nuova Ricerca", la macro va in blocco per i motivi sopraccitati.

Per concludere poi avevo posto un'osservazione, cioè:
sanraff ha scritto:... facendo test ho notato che quando scrivo nella casella "Categoria" il soggetto da filtrare, a volte e non sempre il programma tenta di bloccarsi, le scritte poste nella tabella iniziano a tremare velocemente e poi mi apre la pagina della macro e si posiziona a caso su una riga come volesse indicarmi che c'è un errore che poi errori non c'è ne sono, cioè entra in una sorta di non stabilità.
Giudica tu se puoi rispondermi anche all'osservazione e cmq ti ringrazio sempre per il tuo contributo.
Allego file per fare test.
Allegati
Comparazione Prodotti con ListBox.ods
(27.78 KiB) Scaricato 114 volte
OpenOffice 3.3 SU WINDOWS 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Comparazione prodotti in maschera di dialogo

Messaggio da patel »

sanraff ha scritto:
patel ha scritto:quindi ora al posto degli optionbutton usi una listbox ? se è così allega il file aggiornato
Non al posto degli OptionButton, ma come avevo spiegato nel mio terzo post, stavo cercando di imparare entrambe le soluzioni:
.
Scusami sanraff ma io te l'ho chiesto se al posto degli optionbutton usi una listbox e tu hai detto di no.
Aprendo il tuo ultimo file vedo che gli optionbutton non ci sono più.
comunque prova così

Codice: Seleziona tutto

sub NuovaRicerca
    Dlg.getControl("TextField1").text = ""
    Dlg.getControl("TextField1").setfocus()
     Dlg.getControl("ListBox1").selectItemPos( 0, True )
    listfill
End sub
-------------------
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
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Comparazione prodotti in maschera di dialogo

Messaggio da sanraff »

Ciao patel, ho fatto test sull'ultimo tuo suggerimento e la stringa di comando funziona.
Adesso prima di mettere "Risolto", volevo sapere se potevi darmi un tuo parere a due mie osservazioni alle quali non mi hai mai dato una risposta, cosa invece che mi occorrerebbe per imparare cose nuove, segue:
1)
sanraff ha scritto:Adesso volendo imparare a fare la stessa cosa con una casella di riepilogo "ListBox1", ho preso spunto da quel codice, modificando una stringa di comando cioè:

Codice: Seleziona tutto

    if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
l'ho modificata così

Codice: Seleziona tutto

    if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
che fuziona, però ti chiedevo ugualmente un parere tecnico per capire se la sintassi era corretta oppure andava scritta in un altro modo ...
2)
sanraff ha scritto:Per concludere poi avevo posto un' altra osservazione, cioè:
... facendo test ho notato che quando scrivo nella casella "Categoria" il soggetto da filtrare, a volte e non sempre il programma tenta di bloccarsi, le scritte poste nella tabella della maschera di dialogo, iniziano a tremare velocemente e poi mi apre la pagina della macro e si posiziona a caso su una riga come se volesse indicarmi che c'è un errore che poi errori non c'è ne sono, cioè entra in una sorta di non stabilità.
Giudica tu se puoi rispondermi a queste due osservazione e cmq ti ringrazio sempre per il tuo contributo.
OpenOffice 3.3 SU WINDOWS 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Comparazione prodotti in maschera di dialogo

Messaggio da patel »

1) basta scrivere una volta sola
verifica = Dlg.getControl("ListBox1").selecteditem
2) non ho notato niente, forse dipende dalla velocita del processore, infattti ogni volta che premi un tasto viene eseguita la sub listfill (chiamata dall'evento Testo Modificato della textbox) che riscrive le listbox
-------------------
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
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Comparazione prodotti in maschera di dialogo

Messaggio da sanraff »

...ho provato la stringa di comando, però il sistema mi va in errore, cioè il cursore si posiziona su "End Sub" della "listfill" con il messaggio "Simbolo Inatteso".
A questo punto mi tengo le mie visto che sono funzionanti, mi dispiace che non si possa fare nulla sulla stabilità del programma perchè non mi sembra del tutto opportuno che mentre è in esecuzione tutto ad un tratto per cavoli sua apre la macro dichiarando che c'è un errore quando alla verifica l'errore non c'è.
Termino qui la discussione, perché alla fine le macro funzionano e riallego i due file per metterli a disposizione della comunità.

Grazie di tutto ci vediamo alla prossima.
Allegati
Comparazione Prodotti con option button.ods
(24.97 KiB) Scaricato 109 volte
Comparazione Prodotti con ListBox.ods
(27.78 KiB) Scaricato 121 volte
OpenOffice 3.3 SU WINDOWS 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Comparazione prodotti in maschera di dialogo

Messaggio da patel »

forse non hai interpretato bene la mia soluzione

Codice: Seleziona tutto

Sub listfill(optional event) ' macro che funziona su filtro scelta List Box
   if ismissing(event) then
      datamodel.addRows(dimarray(ubound(Dati)), (Dati))
      datamodel2.addRows(dimarray(ubound(Dati2)), Dati2) 'controllo sulla seconda tabella
   else
       verifica = Dlg.getControl("ListBox1").selecteditem ' <<<<<<<<<<<<<
      datamodel.removeAllRows()
.......
così funziona
-------------------
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
Rispondi