› Sviluppare funzionalita su Microsoft Office con VBA › Scrivere dentro una ComboBox le prime lettere di una lista
-
AutoreArticoli
-
Buongiorno a tutti ... Ho una UserForm con dentro 2 ComboBox. Con i vostri suggerimenti funziona tutto perfettamente, quindi nessun codice da cambiare ( spero ) . Vengo al dunque: la seconda ComboBox apre un menu a tendina con una Lista di nomi in base alla richiesta della ComBox 1, e selezionandone uno si apre scheda di quel nome ... è possibile poter digitare le prime lettere per far apparire i nomi che iniziano con quelle lettere e poi in qualche modo cliccarlo per aprire la scheda ? Perchè ho provato, ma come digito la prima lettera mi apre subito la prima scheda che inizia con quella lettera. Quindi avendo due o piu nominativi con la stessa iniziale dovrei per forza aprire dalla freccetta della ComboBox ...
Allego il file ...
Grazie
EnricoAllegati:
You must be logged in to view attached files.Ciao Patel e grazie ... quindi non c'è nessun modo per farlo ?!?! ... Ho provato a togliere il Codice dalla ComboBox 2 e in quel modo esegue ciò che vorrei ma solo a metà ... cioè ti fa scrivere ma una volta finito poi non mi manda alla pagina scritta 🙁
Enrico
Prova a dare uno sguardo al file allegato e vedi se è quello che serve a te e se riesci ad adattarlo al tuo caso.
Alfredo
Allegati:
You must be logged in to view attached files.prova a vedere se questo esempio ti può essere utile.
Magari automatizzi ulteriormente i passaggi o comunque ti può servire come spunto
Allegati:
You must be logged in to view attached files.Buongiorno, innanzitutto grazie ad entrambi, ma purtroppo nessuno dei due casi va bene ... in un caso ( Listboxfiltrata ) devo comunque poi premere altro tasto per filtrare, se no non accade nulla ... Nell' altro appare già l' elenco nella User ... anzi, diciamo che questo file ( Autocompletamento ) in parte fa ciò che vorrei, perchè a me occorrerebbe proprio che mentre digito mi iniziano ad apparire solo i nomi interessati con le lettere che sto digitando ... ma poi ? Dovrei dargli un ok ... o poter premere Invio e lui apre la scheda scelta ... quindi non riesco ad adattarlo ...
Come ti ho già detto devi suddividere i due eventi, col change fai il filtro, col Click apri il foglio
ciao a tutti
ciao Enrico ed un saluto a Patel
ma non è la stessa cosa che avevi chiesto in questa discussione
comunque, adatta i tuoi riferimenti e prova
Private Sub ComboBox1_Change() Dim sh 'nome foglio = valore combobox2 sh = ComboBox2 Sheets(sh).Activate End Sub Private Sub UserForm_Initialize() Dim wk As Workbook Dim ws As Worksheet Set wk = ThisWorkbook Set ws = Sheets("Foglio1") UserForm1.ComboBox1.List = ws.Range("a1:a6").Value '<<<<<<<< adatta il tuo range End Sub
Ciao
Frank
Bravissimo Frank, ero partito da quella discussione creando questo file, che poi è andato mano mano evolvendosi. Dove non riuscivo ad andare avanti mi avete aiutato sempre Voi in questo fantastico sito di Maestri.
In pratica non so come adattare i tuoi riferimenti, perchè poi non mi funzionano altre cose. Nel File appena aperto si vedono diversi fogli perchè l' ho salvato così, ma in realtà quei fogli saranno tutti nascosti, poi si apriranno singolarmente alla richiesta sulla ComboBox2, per poi richiudersi quando si torna alla pagine iniziale. Come avrai notato ci sono stati vari cambiamenti per crearlo come l' avevo pensato e fino a quì tutto ok. Se questa cosa proprio non si può fare avevo pensato ad inserire un altro pulsantino di OK accanto alla seconda Combobox ... potrebbe esser più facile in questo modo poter digitare le iniziali e una volta spuntato il nome fare direttamente Clik col mouse sul nuovo Pulsante OK ? Ho allegato altro fileEnrico
Allegati:
You must be logged in to view attached files.Ciao Enrico,
In pratica non so come adattare i tuoi riferimenti, perchè poi non mi funzionano altre cose.
premetto che non ho guardato il tuo ultimo file e ti confesso che ho poca intenzione di farlo.
Se alleghi un file completo, sembra che tu non abbia fatto nessun tentativo, e ti invito a ricordare che se
nascondi dei fogli dovrai "scoprirli e rinasconderli" ogni volta che tramite codice li tirerai in ballo.
Il consiglio:
allega il file progetto completo per come lo hai strutturato, evidenzia UNA COSA alla volta, che non riesci a risolvere e soprattutto specifica i tentativi che hai fatto per riuscirci.
Forse tu impari qualcosa in più e noi non dovremo ricostruire mentalmete il criterio che vuoi seguire nel tuo progetto.
ciao
Frank
Il file è proprio per come è stato strutturato ... e il problema è solo sulla seconda ComboBox ... ovviamente i tentativi non funzionanti sono tolti appunto per lasciare il File funzionante fino a quel punto ...
Grazie
Enrico
ciao Enrico,
quindi mi sorge una domanda:
ovviamente i tentativi non funzionanti sono tolti appunto per lasciare il File funzionante fino a quel punto ...
e quindi perchè qualcuno faccia per te, quello a cui tu sei interessato?
Abbozza almeno un tentativo............
Ciao
Frank
Riciao,
ho messo direttamente solo il codice che riguarda il problema dove non riesco ad arrivare ... ( La UserForm l' ho chiamata "Selezionatore" e la ComboBox interessata "Nominativo" ) ...
Enrico
Private Sub Nominativo_Change() If Me.Nominativo.Value <> "" Then Worksheets(Me.Nominativo.Value).Visible = True 'rendo visibile il foglio che prima non era visibile Worksheets(Me.Nominativo.Value).Select 'seleziono il foglio End If Me.Nominativo.Value = "" Unload Selezionatore 'faccio richiudere la UserForm End Sub
ciao Enrico,
rileggi il post 25877 e nello specifico il codice relativo alla ComboBox.
poi prova a sostituire
Worksheets(Me.Nominativo.Value).Visible = True
con
Worksheets(sh).Visible = True
ciao
Frank
Nulla, ho provato ma non funziona ... anche perchè il tutto è ora con tutt' altro codice e non con quello della passata discussione. Ho dovuto ricrear in altro modo perchè seguisse determinati criteri ... se aprivi il file vedevi com' era fatto ... 🙁
Grazie comunque per la gentilezza nel rispondere ... proseguo lo studio ...Enrico
non funziona è come dire:"Piove!"
ma piove tanto?
di traverso?
da quanto ha cominciato?
comunque, prova
`Private Sub Nominativo_Change() If Selezionatore.Nominativo.Value <> "" Then Worksheets(Me.Nominativo.Value).Visible = True 'rende visibile il foglio che prima non era visibile Worksheets(Me.Nominativo.Value).Select Selezionatore.Hide End If End Sub`
ciao
Frank
Ciao Frank ... nulla da fare, provato anche questa ma niente ... come Clicco sul pulsante per aprire la UserForm ora la apre assieme alla pagina di VBA ingiallendomi il Comando che avevo messo per aprirlo, cioè "Selezionatore.Show". Chiudendo la pagina VBA e dando l' OK la Userform rimane aperta ma all' interno non c'è più nulla ... Non so se aprendo il file avevi visto che avevo messo un pulsante per aprire la User ( che ha all' interno queste due famose Combo )
Enrico
ciao Enrico,
il tuo file al post 25881 funziona, ma la cartella di Excel non ha tutti i fogli
che vuoi richiamare tramite la combbox Nominativo.
Quindi, non arrenderti e controlla come strutturi il file.
DOPO, per quanto mi riguarda, FORSE, se ne riparla.
ciao
Frank
ciao,
allego file, a me funziona, come il tuo:"non funziona"
Poi mancano dei fogli, ma quello sappiamo che è un piccolo dettaglio.
Frank
Allegati:
You must be logged in to view attached files.Ciao Frank, i fogli mancano ma come dici è solo un dettaglio. In realtà quei fogli sarebbero tutti nascosti ... nel file sono visibili solo per far capire il File ... una volta entrati in ogni scheda, al momento in cui si torna alla Home (pagina 1) tramite l' apposito pulsante, la scheda con il Nome sparirà.
Riguardo al file che hai allegato ho notato che hai cambiato l' ultima riga mettendo "Selezionatore.Hide" al posto di "Selezionatore.Unload" ... e in effeti questo sì che funziona, ma poi si blocca ... Cioè ti fa scrivere le iniziali, cliccando sull' OK ( e questo l' hai aggiunto te perchè io avevo fatto solo il pulsante ma ancora senza codice 😉 ) ti porta sul nominativo selezionato ... poi tornando alla Pagina 1 tramite pulsante " Home " ti ci fa tornare nascondendo subito la scheda del nominativo ... Fin quì è tutto giusto, ma poi ripremendo il pulsante di selezione che mi fa aprire la UserForm mi va in un errore che prima non c'era e precisamente con questa scritta: Impossibile trovare la proprietà Match per la classe WorksheetFunction ... Clicco su Fine e sparisce, quindi devo corregger qualcosa ...
L' errore si riferisce a questo codice:Private Sub Mansione_Change()
Dim Sh As Worksheet
Set Sh = ThisWorkbook.Sheets("Lista")
Dim i, n As Integer
Me.Nominativo.Clear
n = Application.WorksheetFunction.Match(Me.Mansione.Value, Sh.Range("1:1"), 0) 'questo va in debug
For i = 2 To Application.WorksheetFunction.CountA(Sh.Cells(1, n).EntireColumn)
Me.Nominativo.AddItem Sh.Cells(i, n).Value
Next i
Me.Nominativo.ListRows = 20
End Sub
Ciao e cmq grazie per l' aiuto
Enrico
ciao,
come ho già detto, funziona, e qualche modifica potresti tentarla anche tu........
E come ho già detto, non è che i fogli che mancano saranno nascosti:
MANCANO PROPRIO. Esempio, il foglio di Paolo e Fabrizio, ma probabilmente ce ne sono altri che mancano......
non venire a dire che che ti dà l'errore "Indice non incluso nell'intervallo" perchè saprai già come risolvere.........
ciao
Frank
P.S. ho fatto un pò di confusione con gli allegati... i files excel sono lo stesso file
Allegati:
You must be logged in to view attached files.Buongiorno Frank e buongiorno a tutti,
ho provato in questi giorni cercando di evitare di rompere quì, ma non sono riuscito.
Ho modificato il file risolvendo la mancanza dei Fogli che dicevi, i quali credo non fossero il problema reale, perchè non richiamandoli non c' era nessun problema ...
Sono ripartito dal Test 3 modificandolo, perchè su questo file potevo inserire i primi caratteri nelle Combobox, ma il problema principale " Impossibile trovare la proprietà Match per la classe WorksheetFunction ", nella Combobox Mansione, come scritto nel Post 26032 rimane e davvero non so come risolvere, se no non avrei chiesto un aiuto ...Grazie come sempre per i vari tentativi
EnricoAllegati:
You must be logged in to view attached files.ciao Enrico,
domanda:
hai provato ad usare il file che ho allegato al post 26036 senza moficarlo?
Funziona? A me sì!
Bisogna andare per gradi e partire da dei dati certi!
Se funziona sostituisci il tuo e ricordati TUTTE le eventuali modifiche che apporti successivamente.
Probabilmente la versione che utilizzi tu ha ancora dei refusi precedenti, o le mofiche che hai effettuato non sono congrue per l'obiettivo.
Ma non si può ogni volta ricostruire le modifiche che apporti: diventa una lotta impari.... e senza fine.....
Ciao
Frank
Ciao Frank ... certo che ho provato e infatti ti confermo che non funziona. Il file che invece hai mandato funzionante ( sulla possibilità di scrivere i primi caratteri nelle ComboBox ) è quello che avevi messo nel Post 25988, il quale è differente da quello che hai allegato nel post 26036. La differenza sono gli eventi invertiti tra i due File. Ossia sul File funzionante ( in parte ) hai messo l' Evento "AfterUpdate" al posto del "Change" sulla ComboBox 2 ... Viceversa nell' altro, il quale non andava.
Ho risolto il tutto mettendo l' Evento "AfterUpdate" per entrambe le ComboBox ... e non ho più l' errore che dicevo. Ti allego la modifica :`Private Sub Mansione_AfterUpdate() Dim Sh As Worksheet Set Sh = ThisWorkbook.Sheets("Lista") Dim i, n As Integer Me.Nominativo.Clear n = Application.WorksheetFunction.Match(Me.Mansione.Value, Sh.Range("1:1"), 0) For i = 2 To Application.WorksheetFunction.CountA(Sh.Cells(1, n).EntireColumn) Me.Nominativo.AddItem Sh.Cells(i, n).Value Next i Me.Nominativo.ListRows = 20 End Sub Private Sub Nominativo_AfterUpdate() If Me.Nominativo.Value <> "" Then Worksheets(Me.Nominativo.Value).Visible = True 'rende visibile il foglio che prima non era visibile Worksheets(Me.Nominativo.Value).Select End If Me.Nominativo.Value = "" Selezionatore.Hide End Sub`
e grazieeeeeeeeee anche per la pazienza
Enrico
-
AutoreArticoli