Тёмный

Corso VBA Excel ITA - 63 - Userform e controlli (combobox parte 1) 

NickTheGeek
Подписаться 6 тыс.
Просмотров 16 тыс.
50% 1

Опубликовано:

 

30 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 48   
@claudioc4914
@claudioc4914 3 года назад
buongiorno ho visto nel video varie possibilità di utilizzo della combobox , ma vorrei porre questo quesito : se ho colonna A e B (codice e descrizione) in " foglio 4 "e in "foglio2 "devo inserire questi dati attraverso una combo che una volta scelto il codice mi faccia apparire sulla text la sua descrizione (del codice scelto in combo) come bisogna procedere ?. Grazie
@NickTheGeek
@NickTheGeek 3 года назад
Ciao Claudio. Supponendo che la combobox e la textbox si chiamino Combobox1 e TextBox1, farei così: codice = ComboBox1.Value Sheets("Foglio4").Activate Columns("A:A").Select riga_trovata = Selection.Find(codice).Row descrizione = Cells(riga_trovata, 2) TextBox1.Value = descrizione Cells(1, 1).Select Sheets("Foglio2").Select Cells(1, 1).Select = codice ' da modificare in base alle esigenze Cells(1, 2).Select = descrizione ' da modificare in base alle esigenze Queste istruzioni devono essere scritte in un evento, ad esempio il click di un pulsante oppure il change della combobox stessa. In pratica attivo il foglio 4, seleziono la colonna A (quella con il codice) e quindi utilizzo sulla colonna la funzione Find, per trovare la riga che contiene il valore presente nella combobox; poi assegno alla variabile descrizione il valore nella stessa riga ma nella colonna B; poi faccio scrivere la descrizione nella textbox; infine scrivo nel foglio2. Sull'ultima parte sono incerto, perché non so esattamente dove tu voglia scrivere i valori nel foglio2, quindi li ho solo scritti in A1 e B1. Fammi sapere.
@claudioc4914
@claudioc4914 3 года назад
@@NickTheGeek Private Sub CommandButton1_Click() Dim codice As Integer Dim riga_trovata As Integer Dim descrizione As Integer codice = ComboBox1.Value (errore debug) Sheets("Foglio4").Activate Columns("A:A").Select riga_trovata = Selection.Find(codice).Row descrizione = Cells(riga_trovata, 2) TextBox1.Value = descrizione Cells(1, 1).Select Sheets("Foglio2").Select Cells(1, 1).Select = codice ' da modificare in base alle esigenze Cells(1, 2).Select = descrizione ' da modificare in base alle esigenze End Sub Salve , ho provato le istruzioni man non si popola la combo e mi da errore , non capisco dove sbaglio .
@claudioc4914
@claudioc4914 3 года назад
ciao ho capito l'errore adesso funziona tutto grazie !!
@NickTheGeek
@NickTheGeek 3 года назад
Ciao Claudio, di niente figurati.
@dry_s7945
@dry_s7945 5 лет назад
Bel video!🤗
@NickTheGeek
@NickTheGeek 5 лет назад
Grazie!
@ciroliuzzi4072
@ciroliuzzi4072 4 года назад
Ciao Nick, non riesco a capire e soprattutto risolvere un problema con alcune combobox facenti parte dei noduli ActiveX, puoi aiutarmi a risolvere il problema? 1 ho creato e nominato svariati range presenti in una cartella per poi richiamarli con fa funzione indiretto; 2 ho assegnato il nome alle funzioni (nella scheda formule: CercaSg1, CercaSg2, CercaSg3 ecc. ecc.); Sg sta per sotto gruppo o menu; 3 entrando nelle proprietà di ogni combobox ho inserito il rif. di cella di destinazione nel campo LinKedCell, mentre nel campo ListFillRange ho scritto il nome delle funzioni ( CercaSg1, CercaSg2 ecc.). Problema: nella prima fase, le prime due combobox hanno riconosciuto regolarmente i nomi delle funzioni e in tal caso ho ottenuto i menu a discesa che mi interessavano, nella seconda fase di programmazione delle restanti combobox, pur effettuando le stesse e identiche procedure quest'ultime non riconoscono i nomi delle altre funzioni, ovviamente in tal caso non ottengo nessun elenco dinamico. Sai darmi una spiegazione tecnica? Ti ringrazio e ti saluto.
@NickTheGeek
@NickTheGeek 4 года назад
Ciao Ciro, non conosco i controlli ActiveX e le loro proprietà, se vuoi prova a mandarmi il file a nickthegeek.yt@gmail.com; ci dò un'occhiata ma non garantisco niente
@darioradaelli7179
@darioradaelli7179 4 года назад
Buongiorno, gradisco molto il suo metodo di spiegazione di in linguaggio per me nuovo MA che dopo molti anni mi sta appassionamndo. E' possibile 'puntare' direttamente a qualche lezione che vorrei rivedere in seguito ? grazie. dariora
@NickTheGeek
@NickTheGeek 4 года назад
Ciao, mi fa piacere che i video siano utili; in che senso vorresti "puntare" a qualche lezione? Tipo andare direttamente a un video della playlist?
@faustosabbadin8186
@faustosabbadin8186 3 года назад
Buon giorno Nick, è da poco tempo che seguo le tue spiegazioni per vba perchè sto cercando di imparare qualcosa, e ti vorrei chiedere come risolvere il problema che da una userform nella casella textbox data inserisco la data e poi con un tasto invia la inserisco in un secondo foglio ma qui la trovo come testo e non come data, come si può risolvere questo problema. Grazie
@NickTheGeek
@NickTheGeek 3 года назад
Ciao Fausto, ci possono essere diverse soluzioni, in base a com'è il tuo foglio e a quale ritieni più opportuna. 1) Se sai che in una specifica cella del foglio ci sarà sempre una data, puoi preformattare la cella come data direttamente da Excel (senza usare VBA) oppure 2) In VBA puoi convertire in data usando la funzione CDate; ad esempio se la cella in cui scrivere è la A1 e la casella di testo si chiama txtData, allora: Cells(1, 1) = CDate(txtData.Value) oppure 3) puoi usare la funzione Format: Cells(1, 1) = Format(txtData.Value, "dd/mm/yyyy") oppure 4) puoi usare la proprietà NumberFormat, ma in questo caso ti servono due linee di codice, una per scrivere il dato e un'altra per formattare: Cells(1, 1) = txtData.Value Cells(1, 1).NumberFormat = "dd/mm/yyyy" Non è detto che tutte funzionino, devi fare delle prove.
@faustosabbadin8186
@faustosabbadin8186 3 года назад
Grazie per la risposta, sono riuscito con il vba perchè direttamente con Excel non mi funzione.
@faustosabbadin8186
@faustosabbadin8186 3 года назад
@@NickTheGeek Buon giorno Nick, volevo chiederti ancora un aiuto per creare delle caselle combobox combinate e cioè quando da una casella combobox es. clienti seleziono un cliente vorrei che nella seconda combobox apparissero solamente gli articoli di tale cliente. Ho provato a cercare tra i tuoi video ma non ho trovato questo lavoro. Ti ringrazio anticipatamente.
@NickTheGeek
@NickTheGeek 3 года назад
Ciao, trovi qualcosa di simile nel progetto finale (dal video 78), però non saprei indicarti il video esatto, che comunque è inserito in un discorso più ampio relativo al progetto, quindi senza vedere anche gli altri penso che sarebbe inutile. Per capire come fare mi dovresti dire come sono disposti i dati nel foglio, in particolare clienti e articoli.
@faustosabbadin8186
@faustosabbadin8186 3 года назад
@@NickTheGeek Allora, in un foglio ho fatto una tabella con i clienti, una tabella con gli articoli di un cliente ed un'altra tabella con gli articoli di un'altro cliente e poi con una userform una volta inserito tutti i dati mandarli in un foglio chiamato data base. Spero di essermi spiegato. Grazie
@carminechilo1097
@carminechilo1097 4 года назад
Ciao, complimenti e scusa se ti disturbo ancora, ma ho un problema che non riesco a risolvere: in una userform o una combobox con una scelta di numeri che va da 1 a 10 e ho 10 10 caselle di testo rese enable=false all'inizio. Vorrei che in funzione del numero n scelto nella combo si attivassero n caselle di testo. Come posso fare? Grazie ancora, Carmine
@NickTheGeek
@NickTheGeek 4 года назад
Ciao Carmine. Per fare quello che chiedi devi usare l'evento Change della ComboBox. Devi innanzitutto assegnare a una variabile il valore scelto nella combo, quindi fare un ciclo For Each per verificare ogni controllo all'interno della userform: se il controllo è di tipo TextBox, allora enabled deve diventare True. Inoltre devi impostare inizialmente a zero un contatore che viene incrementato di uno ogni volta che una textbox viene abilitata. Questo ti serve perché ad ogni ripetizione del ciclo devi verificare se il numero delle caselle già sbloccate è uguale al valore scelto nella combo: quando i due numeri sono uguali, devi uscire dal ciclo For Each. Di seguito ti metto un esempio di codice che potrebbe servirti; nota che all'inizio ho scritto anche un ciclo che imposta enabled a false per tutte le textbox della userform, in modo da partire sempre con la situazione iniziale corretta (tutto False). Fammi sapere. Private Sub ComboBox1_Change() For Each controllo In UserForm1.Controls 'disabilito tutte le textbox If TypeName(controllo) = "TextBox" Then controllo.Enabled = False Next controllo numero_caselle_da_sbloccare = CInt(ComboBox1.Value) 'qui converto in intero altrimenti rimane testo e non si può fare la verifica alla quart'ultima riga numero_caselle_sbloccate = 0 For Each controllo In UserForm1.Controls If TypeName(controllo) = "TextBox" Then controllo.Enabled = True numero_caselle_sbloccate = numero_caselle_sbloccate + 1 If numero_caselle_sbloccate = numero_caselle_da_sbloccare Then Exit For 'se il numero di textbox già sbloccate è uguale al valore scelto nella combo, il ciclo termina End If Next controllo End Sub
@carminechilo1097
@carminechilo1097 4 года назад
@@NickTheGeek Ciao, grazie mille. Funziona. Ho trovato su internet anche un altro metodo. Ho chiamato tutte le mie caselle di testo con txtTesto1, txtTesto2...txtTesto 10 e con un ciclo for ho utilizzato il seguente codice: Controls("txtTesto" & CStr(i)).Enabled = True e sembra funzionare. Comunque, davvero, fatti fare i complimenti perchè sei davvero bravo, anche se crei dipendenza....ahahha. Posso farti una domanda? sei un appassionato, un laureato in informatica o un ing informatico?
@NickTheGeek
@NickTheGeek 4 года назад
Sì se hai i controlli nominati progressivamente puoi fare anche in quel modo. In generale comunque ti consiglio di rinominare i controlli con nomi significativi, perché se ne hai molti allora poi diventa difficile ricordarsi cosa deve andare nella txtTesto4 piuttosto che nella txtTesto9. Sono solo appassionato di Excel. Grazie ancora per i complimenti.
@carminechilo1097
@carminechilo1097 4 года назад
Chiaro. Non ci avevo pensato. Grande!
@Phil_Vix
@Phil_Vix 3 года назад
Ciao premesso che sono agli inizi con VBA, che sono arrivato a questo video per caso facendo una ricerca e che approfondirò l'argomento seguendo la playlist che mi sembra ottima, ti volevo chiedere come fare per poter scrivere il valore selezionato nella combobox nella prima cella della prima riga libera di uno SPECIFICO foglio della cartella di lavoro :)
@NickTheGeek
@NickTheGeek 3 года назад
Ciao, supponendo che il foglio sia il Foglio1, e la combo sia la ComboBox1, il codice sarebbe questo: Sheets("Foglio1").Cells(1, 1) = ComboBox1.Value Se vuoi farlo premendo un pulsante (CommandButton1), allora devi metterlo nell'evento click del pulsante: Private Sub CommandButton1_Click() Sheets("Foglio1").Cells(1, 1) = ComboBox1.Value End Sub Se invece vuoi farlo ogni volta che il valore della combo viene modificato, allora devi metterlo nell'evento change della combo: Private Sub ComboBox1_Change() Sheets("Foglio1").Cells(1, 1) = ComboBox1.Value End Sub Fammi sapere se era questo che volevi.
@Phil_Vix
@Phil_Vix 3 года назад
@@NickTheGeek grazie mille per la risposta....il tuo canale era proprio quello che cercavo :) oltre ad essere molto preparato e spiegare in maniera impeccabile, sei anche molto gentile e disponibile.... grazie ancora
@NickTheGeek
@NickTheGeek 3 года назад
Grazie a te
@ThePero3067
@ThePero3067 3 года назад
Ciao Nick,nel video a 6:30 scrivi combox1.additem (spazio) cell(i,1). Domanda quali sono i casi e perche non si deve scrivere niente (spazio),io avrei scritto= al posto dello spazio vuoto.
@NickTheGeek
@NickTheGeek 3 года назад
Ciao, il simbolo = si usa quando vuoi assegnare un valore a qualcosa, tipicamente una variabile o una proprietà, ad esempio: mia_variabile = 5 txtDescrizione.Width = 100 AddItem è un metodo della combobox, quindi un'azione che si usa per fare qualcosa, in questo caso aggiungere un valore alla combo. Essendo un metodo non dobbiamo assegnargli alcun valore, ma dare un parametro, cioè dire cosa vogliamo aggiungere; per farlo quindi lasciamo solo lo spazio. Fammi sapere se è chiaro.
@ThePero3067
@ThePero3067 3 года назад
@@NickTheGeek Si,molto chiaro.Bravo. Buona Pasqua
@NickTheGeek
@NickTheGeek 3 года назад
Grazie, buona Pasqua anche a te.
@riccardovara2828
@riccardovara2828 5 лет назад
Ciao Nicola, sto seguendo con molta attenzione il tuo corso, fin dal primo video. In questi ultimi video sulle userform e applicando i tuoi insegnamenti su di un mio file, mi sono reso conto di avere un esigenza: e' possibile avere sulla userform una casella combinata in cui, cliccando la freccia laterale mi eviti di scrivere tutte le volte un dato che magari è già presente su quella colonna del foglio di lavoro? Non so se mi sono spiegato bene....in pratica avere sulla user form il suggerimento che si ha su un foglio, in una cella, cliccando sul tasto destro e scegliendo l'opzione " seleziona da elenco a discesa ".......Resto in attesa di tua gentile risposta...credo che la cosa possa essere di interesse anche agli altri....Intanto ti ringrazio anticipatamente se mi vorrai rispondere
@NickTheGeek
@NickTheGeek 5 лет назад
Ciao Riccardo, non penso di aver capito bene. Quando dici che vuoi evitare di "scrivere tutte le volte un dato che magari è già presente su quella colonna del foglio di lavoro", di quale colonna stai parlando? Una che è già presente nel foglio di lavoro? E dopo aver scelto il valore cosa dovrebbe succedere?
@riccardovara2828
@riccardovara2828 5 лет назад
@@NickTheGeek Per spiegarti bene.....ipotizza di star compilando un campo di una userform corrispondente ad una cella in una colonna del foglio dove ci siano tutte le citta italiane. sul foglio di lavoro puoi evitare di scrivere una città che magari è già presente cliccando sul tasto dx del mouse e scegliendo l'opzione " selezione dall'elenco a discesa"....quell'opzione ti visualizza tutte le città che hai già inserito e scegliendola, excel te la piazza nella cella in cui sei. Io vorrei poter fare la stessa cosa: sto compilando la userform arrivo al campo " città", vorrei, che so, premere una freccetta laterale ( tipo combobox) la quale mi fa vedere tutte le città che fino a quel momento ho inserito e cliccandoci sopra, me la inserisce in quel campo....si può fare? Grazie....gentilissimo
@NickTheGeek
@NickTheGeek 5 лет назад
Ho quasi capito, ma le città già inserite nella combobox della userform dove finiscono? Una sotto l'altra in una colonna del foglio Excel?
@ciroliuzzi4072
@ciroliuzzi4072 4 года назад
Ho visto diverse volte questo video per capire come gestire degli intervalli dinamici in una combobox inserita in una cella del foglio. Per rendere dinamico il nome dell'intervallo ho utilizzato una cella di servizio che grazie al cerca.vert mi restituisce il nome dell'intervallo desiderato. Pur avendo cercare di applicare il codice così come lo hai spiegato in questo video, non sono riuscito a raggiungiere il mio obbiettivo. Posso chiederti cortesemente di fornirmi dei ragguagli in merito? Ti ringrazio e ti saluto. P.s. alla fine di tanta consulenza ti faremo una camicia su misura in quanto è ciò che produciamo. Grazie e buona giornata Ciro
@NickTheGeek
@NickTheGeek 4 года назад
Se il problema è collegato all'altro commento, mandami pure il file all'indirizzo che ti ho indicato
@ciroliuzzi4072
@ciroliuzzi4072 4 года назад
Ciao Nick, scusa il ritardo, le problematiche da me riscontrato con la casella combinatoria (combobox activeX) ho capito che sono generate da un problema legato solo al mio software excel che dovrò reinstallare. Riguardo il codice VBA della macro, ho verificato i range da copiare dal foglio 1 (denominato CLIENTI) e incollare (solo valori) nel record della tabella (denominata DbClientiX) del foglio 2 (denominato (DB_CLIENTI) Il foglio 1 (CLIENTI) ha un range (AU17:AU90) composto da celle che processano (con le funzioni) i dati rilevati da altre celle dello stesso foglio, mentre nel foglio 2 (DB_CLIENTI) c’è una tabella (denominata DbClientiX) composta da 77 colonne che partono dalla cella (“C18”). In quest’ultima dovranno essere popolati i record composti dai suddetti valori. Non ti ho inviato la cartella perché ha raggiunto il pesi di 12 MB, se vuoi te la invio tramite WeTransfer. Se mi permetti, ho riscontrato che sulla programmazione delle combobox activeX c’è molto poco sul web, nonostante sia un comando che probabilmente è stato pensato per svariate funzioni. Secondo un mio modesto parere, dei tutorial dedicati susciterebbero molti interessi da parte di visitatori. Ringraziandoti anticipatamente per la tua gentile disponibilità ti saluto. Ciro
@ciroliuzzi4072
@ciroliuzzi4072 4 года назад
Usa ho dimenticato i rif. dei range: foglio 1 range: (AU17:AU24) in foglio 2 rang: da colonna 3 a colonna 10; foglio 1 range: (AU26:AU30) in foglio 2 rang: da colonna 12 a colonna 16; foglio 1 range: (AU39:AU53) in foglio 2 rang: da colonna 25 a colonna 39; foglio 1 range: (AU57:AU84) in foglio 2 rang: da colonna 43 a colonna 70; foglio 1 range: (AU86:AU90) in foglio 2 rang: da colonna 72 a colonna 16.
@NickTheGeek
@NickTheGeek 4 года назад
Proverei così: Sub test() Application.ScreenUpdating = False Sheets("DB_CLIENTI").Activate prima_riga_vuota_db = Cells(Rows.Count, "C").End(xlUp).Row + 1 For i = 3 To 10 Sheets("CLIENTI").Activate Cells(i + 14, "AU").Copy Sheets("DB_CLIENTI").Activate Cells(prima_riga_vuota_db, i).Select Selection.PasteSpecial Paste:=xlPasteValues Next i For i = 12 To 16 Sheets("CLIENTI").Activate Cells(i + 14, "AU").Copy Sheets("DB_CLIENTI").Activate Cells(prima_riga_vuota_db, i).Select Selection.PasteSpecial Paste:=xlPasteValues Next i For i = 25 To 39 Sheets("CLIENTI").Activate Cells(i + 14, "AU").Copy Sheets("DB_CLIENTI").Activate Cells(prima_riga_vuota_db, i).Select Selection.PasteSpecial Paste:=xlPasteValues Next i For i = 43 To 70 Sheets("CLIENTI").Activate Cells(i + 14, "AU").Copy Sheets("DB_CLIENTI").Activate Cells(prima_riga_vuota_db, i).Select Selection.PasteSpecial Paste:=xlPasteValues Next i For i = 72 To 76 Sheets("CLIENTI").Activate Cells(i + 14, "AU").Copy Sheets("DB_CLIENTI").Activate Cells(prima_riga_vuota_db, i).Select Selection.PasteSpecial Paste:=xlPasteValues Next i MsgBox ("Finito!") End Sub In sostanza verifico qual è la prima riga libera nel foglio DB, e quindi faccio cicli che copia una alla volta tutte le celle; i cicli sono 5 perché tanti sono gli intervalli da considerare. Con la riga : Cells(i + 14, "AU").Copy sfrutto il fatto che la colonna dove scrivere il valore in DB è sempre più piccola di 14 rispetto alla riga da cui prendere il dato in CLIENTI (Ad esempio AU39 va nella colonna 25, e AU86 va nella colonna 72). L'istruzione che incolla è quella speciale per incollare solo i valori. Ovviamente ho supposto che la riga 17 della colonna C del foglio DB sia occupata, altrimenti il calcolo della prima riga libera non funziona. Mi dispiace ma non conosco i comandi ActiveX, quindi non ci farò dei video. Fammi sapere per la macro. Ciao
@ciroliuzzi4072
@ciroliuzzi4072 4 года назад
Ciao Nick, al momento ti ringrazio. Appena inserisco la macro ti faccio sapere. GRAZIE.
@renatobrigatti4219
@renatobrigatti4219 3 года назад
Buongiorno, seguo da tempo e trovo molti spunti interessantissimi e per questo ringrazio. Vagando in rete ho trovato codice per caricare una combobox eliminando i duplicati ma non funziona. Sono un neofita e sicuramente commetto qualche errore banale allego il codice: Dim CL As Range Dim Intervallo As Range Dim Elenco As New Collection Dim Valori As Variant Sheets("Unione").Select Set Intervallo = Range("C1162", Range("C10000").End(xlUp)) On Error Resume Next For Each CL In Intervallo Elenco.Add CL.Value, CStr(CL.Value) Next On Error GoTo 0 With Worksheets("Unione") .CMBNomeCliente.Clear For Each Valori In Elenco .CMBNomeCliente.AddItem Valori Next End With End Sub Ringrazio in anticipo
@NickTheGeek
@NickTheGeek 3 года назад
Ciao Renato. Non posso provarlo , ma a occhio questo codice dovrebbe funzionare, che problema ti dà? Non fa niente? Ti dà errore?
@silvioiozzia7650
@silvioiozzia7650 5 лет назад
io vedo tutto il video sfocato...è colpa mia o è il video cosi?
@NickTheGeek
@NickTheGeek 5 лет назад
direi che lo vedo normalmente, vedi sfocati anche gli altri miei video o solo questo?
@silvioiozzia7650
@silvioiozzia7650 5 лет назад
@@NickTheGeek solo alcuni
@silvioiozzia7650
@silvioiozzia7650 5 лет назад
ho appena scoperto che su un altro mio pc si vede bene quello stesso vide, boh!
@NickTheGeek
@NickTheGeek 5 лет назад
magari è rimasta nei file temporanei di internet una versione sfocata del video, prova a ripulirli se non l'hai già fatto
Далее
User Form parte 01 - VBA Excel Tutorial Italiano 43
14:11
Combobox In VBA User form
15:11
Просмотров 130 тыс.