› Sviluppare funzionalita su Microsoft Office con VBA › una userform per più fogli
-
AutoreArticoli
-
Ciao a tutti, avrei l'esigenza di far funzionare, non contemporaneamente, la stessa userform per più fogli.
Mi spiego: al momento la mia user va a trascrivere dati sul foglio1, ma ogni mese devo usare un foglio diverso, quindi foglio2, poi altro mese ... foglio3 e così via.
Come faccio a dire alla user che da un certo momento in poi mi deve trascriver dati non più sul foglio1 ma sul foglio2 ?
Grazie in anticipo a chi vorrà aiutarmi
Ciao
Se, come suppongo, ogni mese cambierà il Foglio sul quale scrivere e, sempre mia supposizione, il Foglio cambia in base al mese corrente prova a dire alla UF che deve scrivere nel Foglio denominato Gennaio, Febbraio, ecc.
Ma ho paura che sia troppo facile. Forse vuoi dire qualcos'altro.
Ciao,
Mario
Ma ho paura che sia troppo facile. Forse vuoi dire qualcos'altro.
Ho capito cosi' anch'io e vedrai che e' l'interpretazione corretta. Mettendo il nome del mese al foglio corrispondente, il form sapra' subito a quale foglio deve riferirsi (anche un numero va bene, naturalmente).
Certo che sarebbe meglio avere un file di esempio.
si, avete capito bene, ma cosa devo fare per dire alla user di scrivere su foglio diverso dall'iniziale ?
Allego file esempio
Allegati:
You must be logged in to view attached files.Ciao
Innanzi tutto un consiglio: impara ad indentare il codice per una migliore lettura.
Credo, ma non ho fatto alcuna prova, che il problema si ponga, per esempio, in queste righe di codice:
a) nella macro Private Sub cmdInvia_Click() abbiamo Worksheets(1).Range("A999999").End(xlUp).Offset(1).Select
b) nella macro Private Sub cboRicerca_Click() abbiamo Foglio1.Range("A2").Select
Sono due modi diversi di riferirsi al Foglio.
Se utilizzi il primo metodo (te lo consiglio, è più semplice) puoi mettere al posto dell'1 tra parentesi il nome del Foglio sul quale vuoi scrivere, magari facendolo desumere dalla data di registrazione. Ovviamente il nome del mese deve essere uguale (magari numerico).
Ciao,
Mario
Ciao, per capire, come lanci la UserForm?
Ci sono diverse soluzioni:
- Fai riferimento al foglio attivo, inconveniente devi stare attento a non cambiare foglio durante l'esecuzione dell'interfaccia
- Creazione di una variabile pubblica di tipo Worksheet da istanziare prima di lanciare la UF, attenzione a riportare a Nothing la variabile nell'evento di chiusura
- Se ogni mese viene accodato agli altri, cioè è sempre l'ultimo della collezione Worksheets, puoi tranquillamente prendere l'ultima Item della collezione stessa
Quale preferisci?
@Mariis44 hai postato mentre scrivevo, Sorry
Ciao
Ciao, ho provato come dici tu, ma mi da errore (metodo range worksheet non riuscito)
Ho messo il nome del foglio solo nella macro Private Sub cmdInvia_Click()
Ciao
Forse non siamo stati chiari ma nel tuo file non hai un Foglio col nome del mese. Prima creati un foglio col nome del mese e poi vedi di far registrare ciò che ti serve.
Ciao,
Mario
ThisWorkBook.WorkSheets(WorkSheets.Count - 1)Questo comando fa' riferimento sempre all'ultimo foglio della cartella di lavoro qualunque sia il suo nome
Forse non siamo stati chiari
Be' insomma
prova a dire alla UF che deve scrivere nel Foglio denominato Gennaio, Febbraio, ecc.
Mettendo il nome del mese al foglio corrispondente,
Ciao @frasubb
non ti nascondo che questo progetto sarebbe un po' da rivedere...comunque è bene che fai esperienze e man mano che si presenteranno difficoltà ne affronti una dopo l'altra, così da adattare l'intero progetto con le giuste correzioni.
Venendo al tuo problema...siccome pare evidente che tu avrai tanti fogli per quanti mesi dell'anno (Gennaio, Febbraio, Marzo, ecc...), per poter far funzionare la stessa UserForm in ognuno di esso, devi cambiare tutti quei riferimenti assoluti (Foglio1....; WorkSheet(1)....) in ActiveSheet....ovviamente i Fogli dovranno avere identica struttura altrimenti salta tutto.
Pesrchè se ha 12 fogli . partendo da 1= Gennaio fino a 12=Dicembre
Questa non sceglie sempre il mese in corso
Dim N As String N = Format(Date, "m") * 1 Sheets(N).SelectCiao @frasubb
Ciao e grazie, solo che se vado a sostituire foglio1 oppure worksheet con activesheet mi da errore di run-time 438
Cioè. non so se mi sono spiegato, ma io con VBA non ci capisco niente, quindi se sei/siete d'accordo, chiedo l'enorme cortesia di scrivermi l'intera stringa e non solo la parola da sostituire.
Domanda: activesheet fa la sua funzione a prescindere dal nome del foglio, giusto ? Cioè, mi sembra un comando "generico". ho capito bene ?
Grazie mille e chiedo scusa
Creazione di una variabile pubblica di tipo Worksheet da istanziare prima di lanciare la UF, attenzione a riportare a Nothing la variabile nell'evento di chiusura
- Se ogni mese viene accodato agli altri, cioè è sempre l'ultimo della collezione Worksheets, puoi tranquillamente prendere l'ultima Item della collezione stessa
Creazione di una variabile pubblica di tipo Worksheet da istanziare prima di lanciare la UF, attenzione a riportare a Nothing la variabile nell'evento di chiusura
- Se ogni mese viene accodato agli altri, cioè è sempre l'ultimo della collezione Worksheets, puoi tranquillamente prendere l'ultima Item della collezione stessa
E che vor di ? Boooohhh
A prescindere che ti avevo detto al punto 1 e non il 2 o 3.
Nel post #47043 ti ho scritto un'istruzione che fa' riferimento sempre all'ultimo foglio tralasciando il nome o il numero sequenziale dei fogli. Tutto dipende da quello che vuoi fare!!!
Io ho inteso che l'utente ha una UserForm che è adattabile a tutti i fogli presenti nel suo progetto. Quindi se ha attivo il Foglio3, che corrisponde al foglio del mese di Marzo, lui vorrebbe che la UserFrom lavori, con tutti i suoi oggetti, su quel Foglio. Stessa cosa se passa su un altro Foglio che ha struttura identica.
Mi spiego: al momento la mia user va a trascrivere dati sul foglio1, ma ogni mese devo usare un foglio diverso, quindi foglio2, poi altro mese ... foglio3 e così via.
Questo è quello che ha scritto nel primo post. Quindi avevo suggerito di far riferimento all'ultimo foglio della cartella di lavoro.
Io ho inteso che l'utente ha una UserForm che è adattabile a tutti i fogli presenti nel suo progetto. Quindi se ha attivo il Foglio3, che corrisponde al foglio del mese di Marzo, lui vorrebbe che la UserFrom lavori, con tutti i suoi oggetti, su quel Foglio. Stessa cosa se passa su un altro Foglio che ha struttura identica.
In questo caso avevo suggerito il foglio attivo.
Vedi che se scrivi , viene scritto il foglio Maggio , al cambio del mese scrive sempre nel mese corrente
Sempre che sia quello che stai cercando di fare (io ho capito così)
Allegati:
You must be logged in to view attached files.Vedi che se scrivi , viene scritto il foglio Maggio , al cambio del mese scrive sempre nel mese corrente
Ciao, hai capito benissimo, solo che provo ad aprire il file ma mi dice che le macro sono bloccate.
Vado in impostazioni, levo tutti i blocchi ma continua a darmi lo stesso errore. Che devo fare ?
Io ho inteso che l'utente ha una UserForm che è adattabile a tutti i fogli presenti nel suo progetto. Quindi se ha attivo il Foglio3, che corrisponde al foglio del mese di Marzo, lui vorrebbe che la UserFrom lavori, con tutti i suoi oggetti, su quel Foglio. Stessa cosa se passa su un altro Foglio che ha struttura identica.
esattamente
Clicca col tasto destro del mouse sul file prima di aprirlo e sbloccalo. Questa è un'impostazione di sicurezza del sistema operativo.
Riguardo al tuo ultimo post "esattamente" allora devi usare il foglio attivo con ActiveSheet
Se ricordo bene, ieri ho apportato giusto questa piccola modifica a tutti i riferimenti al Foglio1 con ActiveSheet e, per quanto dovrebbe fare il progetto, la UserForm funzionava. Nel senso che ho aggiunto una serie di Fogli nuovi nominandoli Gennaio, Febbraio, Marzo, ecc.. e al variare del foglio attivo, la UserForm andava a prelevare i dati e popolare le celle nel foglio corrente.
Vedi che se scrivi , viene scritto il foglio Maggio , al cambio del mese scrive sempre nel mese corrente
Ciao, hai capito benissimo, solo che provo ad aprire il file ma mi dice che le macro sono bloccate.
Vado in impostazioni, levo tutti i blocchi ma continua a darmi lo stesso errore. Che devo fare ?
Prova ad andare in impostazioni Macro e attivarle (comunque è sempre il tuo Foglio può succedere quando si scarica dalla rete)
prova anche a salvarlo in un'altra coppia
E' anche possibile che con la versione di Excel che usi tu che non funzioni
Oppure prova ad aprire questo che allego
Allegati:
You must be logged in to view attached files.Se ricordo bene, ieri ho apportato giusto questa piccola modifica a tutti i riferimenti al Foglio1 con ActiveSheet e, per quanto dovrebbe fare il progetto, la UserForm funzionava. Nel senso che ho aggiunto una serie di Fogli nuovi nominandoli Gennaio, Febbraio, Marzo, ecc.. e al variare del foglio attivo, la UserForm andava a prelevare i dati e popolare le celle nel foglio corrente.
Ciao, si ok grazie per la tua modifica ma non hai allegato il file "riveduto e corretto"
Ti posso chiedere di farlo, per favore ovviamente ?
grazie
-
AutoreArticoli
