[Risolto] Macro aggiorna casella di riepilogo

Discussioni sulle caratteristiche di database
Rispondi
Edo1
Messaggi: 40
Iscritto il: sabato 3 maggio 2014, 14:39

[Risolto] Macro aggiorna casella di riepilogo

Messaggio 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
Allegati
Prova.odb
(13.98 KiB) Scaricato 138 volte
Ultima modifica di charlie il lunedì 1 febbraio 2021, 14:25, modificato 1 volta in totale.
Motivazione: Aggiunto [Risolto] e ✔ verde.
Libreoffice 7.3.7.2
Kubuntu 22.04
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8954
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro aggiorna casella di riepilogo

Messaggio 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.
Allegati
Macchinari.odb
(31.03 KiB) Scaricato 129 volte
charlie
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Edo2
Messaggi: 19
Iscritto il: giovedì 21 gennaio 2021, 7:16

Re: Macro aggiorna casella di riepilogo

Messaggio 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 
Kubuntu 20.04 Libre Office 6.4.6.2
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8954
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro aggiorna casella di riepilogo

Messaggio 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.
 Editato: Trovato: 
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 ...
charlie
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8954
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro aggiorna casella di riepilogo

Messaggio da charlie »

Ciao, cercando ho trovato ed adattato una soluzione più semplice e che funziona.
Allegati
Macchinari_2.odb
(15.76 KiB) Scaricato 167 volte
charlie
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Edo2
Messaggi: 19
Iscritto il: giovedì 21 gennaio 2021, 7:16

Re: Macro aggiorna casella di riepilogo

Messaggio 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!!!
Allegati
Provamc.odb
(15.15 KiB) Scaricato 160 volte
Kubuntu 20.04 Libre Office 6.4.6.2
Rispondi