Pagina 1 di 1
[Risolto] Macro aggiorna casella di riepilogo
Inviato: sabato 16 gennaio 2021, 8:52
da Edo1
Buongiorno
spiego brevemente nel mio database ho creato una tabella che uso da filtro per i miei report in Calc.
Ho creato un formulario con due caselle di riepilogo che alla selezione la macro mi salva il record nella mia casella filtro.
Ho solo un problema che non riesco a risolvere, vale a dire che la seconda casella combinata dovrebbe visualizzare i dati in base alla selezione sulla prima. e lo fa, ma devo fare refresh del formulario.
Se metto un pulsante refresh funziona ma ho gia' provato diverse macro trovate nei vari post e non riesco a farlo funzionare in automatico.
Allego un esempio sperando come sempre a qualche gentile aiuto da parte vostra.
Grazie
Re: Macro aggiorna casella di riepilogo
Inviato: domenica 17 gennaio 2021, 15:27
da charlie
Ciao, non sono stato capace di far funzionare la tua macro. La uso anch'io sui miei db ma nel tuo caso sembra "refrattaria" a qualsiasi evento la si associ.
Sono così andato a cercare e ho trovato 2 macro che lavorano diversamente ma arrivano allo stesso risultato.
Entrambe usano Combobox anziché ListBox.
- La prima lavora direttamente sulla tabella Macchinari e non ho trovato poi come collegarla ad una visualizzazione "pratica" del risultato.
- La seconda lavora sulla tabella Tbselezione con i valori presi da Macchinari e visualizza il risultato in una griglia. L'aggiornamento del secondo valore selezionato avviene facendo clic da qualche parte (cioè facendo perdere il focus a combo 2).
Non sono opera mia, le ho solo adattate al tuo db.
Re: Macro aggiorna casella di riepilogo
Inviato: mercoledì 27 gennaio 2021, 14:09
da Edo2
Grazie come al solito Charlie della disponibilità, metterei risolto ma non riesco ancora a accedere con edo1
Cmq guardando in giro ho trovato anche questa macro proprio per le caselle di riepilogo che dice aggiornarle a cascata, la posto per vedere cosa ne pensate in quanto a me da errore.
Funzionasse sarebbe molto semplice per tutti in quanto dicono non bisogna cambiare nessun dato alla macro
Ho una casella di riepilogo sul form ma come ci vado sopra col mouse mi da l'ultimo errore della lista, cioè:il controllo deve essere un listbox nel Formulario e non in un campo di controllo tabella.
Ma il mio è nel formulario
Grazie
Codice: Seleziona tutto
option explicit
Sub CasCadeListbox (oEvent as Object)
oEvent.source.model.commit
'Use the event: mouse inside
' The first listbox does not need the event
dim oListboxControl,oListboxModel
dim oFormModel
dim oFilterGroup() ' This is the group for the listboxes
const cPropertyNames="ListSource ListSourceType" ' I use this getting and setting properties
dim mPropertyValuesOld(),mPropertyNames
' I use the error sub
' for filtering Value list, Native SQL and table list in the listboxes.
' When one of this option for the listboxes are used then the sub produced
' an error for the command in the querycomposer.
on local error goto PlaceBackListboxValues:
oListboxControl=oEvent.source
oListboxModel=oListboxControl.model
if oListboxModel.implementationname="com.sun.star.comp.forms.OListBoxModel" then
' The listbox is in a form and not in a gridcontrol
' In a gridcontrol we have no group so we can not use this idea
oFormModel=oListboxModel.parent
' Init the oFilterGroup there are all the control with the same name.
oFormModel.getgroupbyname(oListboxModel.name,oFilterGroup())
if UBOUND(oFilterGroup())<>-1 then
'do action
'++++++++++++++++++++++
' There are several listboxes for searching
dim oComposer
mPropertyNames=split(cPropertyNames)
mPropertyValuesOld=oListboxModel.getPropertyValues(mPropertyNames)
oComposer =oFormModel.ActiveConnection.GetComposer(_
choose(oListboxModel.ListSourceType,0,1,2),_
oListboxModel.listsource(0) )
' I use choose for changing the difference between the listboxsource type to
' the command type. It does also filter out the zero for value list and
' four for the native SQL
' Both cases give an error. The error call the on error and beeps.
dim x,oListbox
for x=0 to ubound(oFilterGroup)
oListbox=oFilterGroup(x)
'appendFilterByColumn
if EqualUnoObjects(oListbox,oListboxModel) then
'Now we knew the place of the listbox in the array
oListboxModel.setPropertyValues(_
mPropertyNames,_
array(array(oComposer.getquery),3))
' Set the listsource query and the listsource type.
' listsource type is 3
oListboxModel.refresh '
oListboxModel.setPropertyValues(_
mPropertyNames,mPropertyValuesOld)
exit for
else
oListbox.commit 'Be sure the value is commit to the field but not to record
oComposer.appendFilterByColumn(oListbox.boundfield,createunovalue("boolean",true),1)
end if
next
else
msgbox "When you have no group then you can not use this macro" & chr(13) &_
"Make a group in the form navigator by giving some control the same name"
end if
else print "The control must be a listbox in a form not in a grid control"
end if
on local error goto 0
exit sub
PlaceBackListboxValues:
beep
oListboxModel.setPropertyValues(_
mPropertyNames,mPropertyValuesOld)
on local error goto 0
beep
oListboxModel.refresh
end sub
Re: Macro aggiorna casella di riepilogo
Inviato: mercoledì 27 gennaio 2021, 15:44
da charlie
Edo2 ha scritto:ma non riesco ancora a accedere con edo1
vedi nuova mail.
Ma, eventualmente, posso provvedere io al [Risolto].
Edo2 ha scritto:guardando in giro ho trovato anche questa macro
dovresti allegare anche il database di origine e/o il link dell'argomento.
https://forum.openoffice.org/en/forum/v ... ox#p251611 ma il tutorial non ha un suo file di riferimento e bisogna costruirlo seguendo le indicazioni del testo. Un po' troppo impegnativo ...
Re: Macro aggiorna casella di riepilogo
Inviato: giovedì 28 gennaio 2021, 11:42
da charlie
Ciao, cercando ho trovato ed adattato una soluzione più semplice e che funziona.
Re: Macro aggiorna casella di riepilogo
Inviato: sabato 30 gennaio 2021, 9:33
da Edo2
Grazie Charlie direi che questa soluzione e' perfetta e funziona bene
avevo giusto trovato pure io una cosa molto semplice ma mi dava problemi di grafica, intendo che i menu dei listbox tenevano la lunghezza della selezione precedente invece con le tue macro e' perfetta.
Tengo a precisare che cercavo ancora non perche' non mi piacessero le soluzioni precedenti, tu mi hai dato quello che ho chiesto, era la mia situazione diversa da come ho spiegato, per dirla semplice listbox Nazione che dopo scelta nazione mi aggiornava due listbox una dei clienti e una dei macchinari in quella nazione.
Dopo aggiornamento list box macchinari un altro listbox con la versione sempre in quella nazione. Con ultimo esempio che hai dato sistemato per le mie necessita' funziona alla grande.
Allego ugualmente quello che ho trovato, in pratica solo un refresh del form ma che funziona.
Puoi mettere RISOLTO Grazie!!!