› Sviluppare funzionalita su Microsoft Office con VBA › Pulsante condiviso su diversi fogli
-
AutoreArticoli
-
Buongiorno a tutti ragazzi, spero stiate tutti bene.
Come in passato mi trovo qui per chiedere un vostro consiglio. Come vedete in allegato, sto sviluppando un configuratore che prevede un'interfaccia identica per diversi bracci (potranno essere 20 o addirittura 30). Attualmente sto prevedendo di gestire la cosa con diversi fogli duplicati: ognuno corrisponde ad un braccio (a titolo di esempio nell'allegato ce ne sono solo 3). In alto c'è una combobox che permette di switchare tra un braccio e l'altro (quindi tra un foglio e l'altro: la barra dei fogli verrà nascosta). Non è ancora implementato alcun codice semplicemente perchè adesso mi sto ancora occupando dell'interfaccia. Il problema è che però ho una serie di controlli che sono comuni a tutti i fogli (alcuni pulsanti, tra cui quello di avvio, la combobox per lo switch del braccio, ...) e quindi vorrei capire se non sia possibile fare un modo che lo stesso controllo sia applicabile su tutti i fogli in modo da gestirlo una volta, e non 20 o 30 volte duplicandone il codice.
Proprio per ovviare a questo problema come vedete all'interno del file avevo inizialmente creato una userform multischeda. Ho scartato però questa soluzione principalmente perchè anche se posso copiare il contenuto della singola scheda facilmente per 20-30 bracci, dovrei poi rinominare a mano una cosa come 24x30 controlli (textbox e combobox) per avere una struttura di nomi sensata che io possa richiamare nel codice; mentre sfruttando i fogli di excel so per esempio che il campo "IPOT" sarà sempre la cella E12; cambierà solo il foglio in funzione del braccio.
Spero che la vostra saggezza possa illuminarmi su una soluzione efficiente 🙂
Grazie in anticipo!
Giulio
Allegati:
You must be logged in to view attached files.Ciao
Il problema che poni non è di semplice soluzione (dipende, però, dal tuo gradi conoscenza di VBA)
Se ho capito bene ti suggerisco di cercare/studiare APPLICATION.CALLER e, principalmente, i Moduli di Classe.
Ciao,
Mario
Ciao Mario,
grazie per il tuo suggerimento. La mia conoscenza di VBA è abbastanza buona (anche se non sono certo un programmatore professionista), tuttavia non riesco a capire come potrei sfruttare l'application.caller o i moduli di classe per questo scopo. Potresti essere più specifico?
Non è ancora implementato alcun codice semplicemente perchè adesso mi sto ancora occupando dell'interfaccia
che occuparsi dell'interfaccia dovrebbe essere l'ultima cosa a cui pensare.
Se ho capito: tu hai dei foglio con dei controlli, vorresti che quando selezioni un foglio i controlli (combobox) abbiano tutti lo stesso valore, mentre le textbox debbono essere vuote per poter inserire dei valori,sempre se ho capito, perche in questo caso potresti scrivere una macro unica, che viene attivata alla selezione del foglio
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Ciao Albatros, ritengo che l'interfaccia invece sia la prima cosa, perchè se non è ben definito come l'utente dovrà gestire gli input ritengo sia poco efficiente scrivere il codice, visto che poi andrà quasi sicuramente cambiato.
Detto questo, cerco di spiegare meglio il problema: immagina di avere una userform, che all'interno ha un controllo multischeda con all'interno una serie di input da inserire. Dentro la userform ma FUORI dal multischeda c'è un pulsante (come vedi nell'allegato che ho messo): il pulsante è unico e una volta scritto il suo codice esso funzionerà indipendentemente dalla scheda in cui mi trovo, giusto?
Ecco, ora immagina che ogni scheda sia invece sostituita da un foglio di excel. Io, a prescindere dal foglio in cui mi trovo, voglio che il pulsante sia uno solo, non uno diverso per ogni foglio, perchè altrimenti dovrei codificare tutti i pulsanti, ma a livello logico in realtà il pulsante in questione dovrebbe essere uno (esattamente come l'esempio del userform).
Se apri il file che ho allegato dovrebbe essere tutto abbastanza trasparente.
Ciao Giulio
Scusa tanto , ma una volta che hai aperto l'userfor , perchè non metti una combo per selezionare i fogli senza chiudere l'userform
Ciao ragazzi, Oscar forse non mi sono spiegato bene, io NON ho intenzione di usare la userform. Come ho scritto in principio, la userform era il piano A, ma l'ho abbandonato perchè avrei dovuto rinominare un'infinità di controlli, quindi ho preferito sostituire la userform+multischeda, con una serie di fogli di lavoro.
Usare l'userfom è facoltativo , decidi tu se usarla o meno ( dopo ti faccio un esempio poi lo allego)
Va bene grazie, puoi implementare l'esempio direttamente sul file che ho allegato io all'inizio? (considerando che le userform che trovi dentro non saranno presenti poichè verranno cancellate).
Va bene grazie, puoi implementare l'esempio direttamente sul file che ho allegato io all'inizio? (considerando che le userform che trovi dentro non saranno presenti poichè verranno cancellate).
Ho già fatto un nuovo foglio , ma se è quello che cerchi si puo fare benissimo
Allegati:
You must be logged in to view attached files.Ciao Oscar, grazie per il tuo contributo, l'idea è buonissima, basta adattarla alle mie esigenze e formattare e posizionare la form correttamente. Non sapevo fosse possibile tenere attiva una form lasciando la possibilità nel frattempo di lavorare sui fogli. Ora vengo al problema cruciale però: 1-Leggendo il codice non ho capito come fai a fare in modo che ciò accada; e 2-Ho letto il codice che hai messo nel modulo di classe, ma sinceramente non ci ho capito quasi nulla, sono per la maggiorparte istruzioni che non conosco (temo che il punto 1 e 2 siano connessi 🙂
IL modulo di classe serve per eliminare la barra nell'userform per renderla piu elegante , la puoi anche eliminare se vuoi un menu piu semplice vedi questo , ma è un po meno elegante
Allegati:
You must be logged in to view attached files.Beh, effettivamente un pannello senza barra è più adatto a questa esigenza, eventualmente cercherò di studiare riga per riga le funzioni che hai usato nel modulo di classe. Ma la cosa che mi interessa capire di più è: come hai fatto a fare in modo che la userform rimanesse sempre in primo piano permettendo al contempo la modifica dei fogli in excel? Normalmente quando un workbook chiama una userform il workbook stesso si blocca fino a che la userform viene chiusa.
Beh, effettivamente un pannello senza barra è più adatto a questa esigenza, eventualmente cercherò di studiare riga per riga le funzioni che hai usato nel modulo di classe. Ma la cosa che mi interessa capire di più è: come hai fatto a fare in modo che la userform rimanesse sempre in primo piano permettendo al contempo la modifica dei fogli in excel? Normalmente quando un workbook chiama una userform il workbook stesso si blocca fino a che la userform viene chiusa.
L'userform non ha bisogno di niente se non la chiudi rimane sempre in primo piano anche se cambi foglio
No il workbook non si blocca perchè si dovrebbe bloccare (devi mettere l'userform in ShowModal=false)
Perfetto grazie, non conoscevo l'attributo showmodal, ho sempre utilizzato useform che di default lo avevano impostato su true evidentemente. Diciamo che se riuscissi a studiarmi la parte del modulo di classe che hai implementato per dare l'impressione di rendere la userform più "integrata" col foglio excel potrei ottenere un buon risultato grafico, credo però non sia proprio una cosa banale da imparare. Detto questo, non esiste invece la possibilità di creare dei controlli condivisi direttamente tra i vari fogli o fare in modo che i controlli possano essere in qualche modo collegati?
-
AutoreArticoli
