Ciao Nicola. Al mn 23,60 la larghezza delle colonne si potrebbe fare con codice. Esempio With lstArchivioClienti .ColumnWidths = "70;90;90;30;80;160;0;0;0;0;15" End With. La materia è talmente interessante che qualche minuto in più non disturba
Bel lavoro Nick
Dovrebbero trasmetterli alla TV italiana x far appassionare ed istruire i giovani al posto della TV spazzatura, ma come al solito le cose belle arrivano da iniziative personali, ancora COMPLIMENTI Nick
Ciao Nick, sto seguendo con interesse il tuo progetto del Gestionale. Purtroppo ho qualche problema con il codice del video 80. Quando tento di lanciare la sub UserForm_initialize() il codice mi da un avviso di errore del tipo: Errore di compilazione "Variabile non definita", e la quarta riga precisamente il testo (x1up) viene evidenziato. Sai darmi qualche suggerimento per risolvere l'errore. Grazie Marzio.
Ciao Marzio, se hai scritto x1up allora l'errore è che al posto del numero 1 deve esserci la lettera L minuscola: xlup. Purtroppo con il font che uso nei video i due caratteri sono molto simili.
Fammi sapere se il problema era quello.
Ciao Nicola! Come sai ti ho già fatto un sacco di complimenti e continuo a lavorare sui miei progetti tramite i tuoi corsi e video. A volta mi invento qualcosa che non so se è possibile e, dopo averci perso la gioventù, chiedo a te! 😃 Se io volessi avere una listbox con solo gli ultimi 10 movimenti oppure con solo i movimenti che ho eseguito quel giorno (tipo una listbox di prima nota). Quando eseguo una list box la vedo sempre dall'inizio, dall'alto e invece mi servono gli ultimi inserimenti. è possibile? Grazie! e super grazie!
Ciao, per avere gli ultimi 10 dovresti cambiare il loop:
For i = 2 to ultima_riga_clienti
con:
For i = ultima_riga_clienti - 9 to ultima_riga_clienti
in modo che parta da 9 righe sopra all'ultima, ad esempio se ultima_riga_clienti = 50, allora partirà dalla 41 e arriverà alla 50 (quindi le ultime 10 righe).
Se invece ti serve la data odierna, prima dell'AddItem dovresti aggiungere una condizione in modo da verificare se la cella con la data corrisponde a oggi; ad esempio se la data è nella colonna E, allora:
If Cells(i, 5) = Date Then
quindi tutte le operazioni a partire dall'additem saranno eseguite solo se la cella con la data contiene la data di oggi.
@@NickTheGeek l'ho messo qui: LastRow = Sheets("Dipendenti").Range("A" & Rows.Count).End(xlUp).Row - 5
GRAZIE! 🤩 sei sempre gentile e disponibile!
Con questa linea di codice però inserisci nella variabile LastRow il numero di righe totali meno 5, ad esempio se in tutto hai 24 righe allora LastRow vale 19.
In questo caso il loop:
For i = 2 to LastRow
ti prenderebbe tutte le righe escluse le ultime 5, ad esempio se ne hai 24 ti metterebbe in listbox tutte dalla 2 alla 19.
@@NickTheGeek Capito, devo riprovare perché mi sembrava giusto invece, leggendoti, ho controllato e confermo (ma non c'erano dubbi!) che mancano proprio le ultime cinque righe. Riprendo subito i tuoi suggerimenti e ricomincio. grazie, sei un grande! 😊
Buongiorno, complimenti per questo video corso. Veramente fatto bene.
Avrei una domanda. Una volta creata la userform come da esercizio, nel momento in cui scrivo il codice e cambio la private sub da userform click a userform initialise l'intestazione passa da userform a general. Lancio la userform ma nella lst non compare alcun dato. Dove sbaglio?
Ciao, grazie per i complimenti. L'unica cosa che mi viene in mente è verificare di aver scritto correttamente il nome dell'evento, che deve essere esattamente UserForm_Initialize (vedi minuto 6:07), quindi verifica soprattutto di aver scritto Initialize con la zeta (e non con la esse).
Se è scritto correttamente e ancora non funziona, anziché scrivere il nome dell'evento a mano, scegli "UserForm" e "Initialize" dai rispettivi menu a tendina in alto.
Nicola buongiorno, ho scoperto da poco i suoi tutorial sul vba materia a me sconosciuta ed avendo tempo a disposizione ( pensionato) sto pasticciando non poco e devo dire che mi affascina al quanto ma sono a chiederle come posso fare ad inserire una barra di scorrimento orrizzontale nella casella di testo, in quanto non potendo allungare eccessivamente la casella alcuni dati mi si troncano , tipo per lo scorrimento verticale che si forma in automatico. se avrai voglia e tempo per una risposta un grazie anticipato e ancora tanti complimenti per i video
Ciao Sergio, grazie per i complimenti, mi fa piacere che in qualche modo i miei video ti siano utili.
Per quanto riguarda la barra orizzontale, devi usare la proprietà ScrollBars della textbox. Se guardi la proprietà nell'editor di VBA, puoi notare che i valori possibili sono: 0 = nessuna, 1 = orizzontale, 2 = verticale, 3= entrambe. Quindi per la barra orizzontale devi selezionare il valore 1 dal menu a tendina, oppure la puoi impostare direttamente nel codice, scrivendo:
TextBox1.ScrollBars = 1
Ovviamente devi cambiare il nome della textbox con quello vero.
Fammi sapere se funziona e se è tutto chiaro.
@@NickTheGeek Nicola buonasera e grazie per la risposta immediata, con il suo suggerimento la barra di scorrimento è comparsa ma si sposta di un tanto non sufficiente a visionare il contemuto della colonna, in quanto la texbox è composta da 5 colonne e quella di cui ho necessità di scorrere è l'ultima a destra ma piu di un tot non si sposta . Ha qualche soluzione in merito ? sicuramente si
nell'attesa un cordiale saluto
Ho un dubbio, è una textbox o una listbox? Se è una textbox, come hai fatto a dividerla in colonne? Se è una listbox, probabilmente devi modificare le proprietà Width (la larghezza complessiva) e ColumnWidths (la larghezza delle singole colonne) in modo da riuscire a visualizzare anche l'ultima colonna per intero. Se non trovi una soluzione, prova (se vuoi) a mandarmi il file a nickthegeek.yt@gmail.com
@@NickTheGeek Nicola buon giorno mi scusi ha ragione è una listbox ed ho risolto seguendo i suoi consigli grazie
ok benissimo
Buongiorno Nick, ho appena visto il tuo video n.80,ma nella mia lstArchivioClienti non appare niente praticamente vuota. ??????
Ciao Alberto, vuoi dire che all'Initialize della frmArchivioClienti non succede niente? In questo caso puoi copiare qui tutto il codice dell'evento Initialize?
Ciao Nicola sono due giorni che divento matto per cercare di risolvere un errore di tipo: "Variabile oggetto o variabile del blocco with non impostata"
Confido in un tuo aiuto.
Ho tagliato le righe che si ripetono.
Con il debug credo di avere individuato il problema nella variabile:
riga_StrutMetMod_da_modificare
ma non capisco come.
Ti spiego il progetto:
ho fatto una routine che chiama da una tabella excel di 48 colonne x n righe, le carica in un Form:
Private Sub UserForm_Initialize()
Sheets("Data_Lists").Activate
carica_Strut_Met_Mod
lstStrutMetMod.ColumnCount = 48
lstStrutMetMod.ColumnWidths = "200;0;0;0;26;26;26;26;26;30;30;30;30;28;28;28;28;28;0;0;0;35;0;35;30;30;30;30;30;28;28;28;28;28;28;28;28;30;28;28;28;28;30;35;35;35;35;35"
cmdModificaParametro.Enabled = False
cmdCancellaParametro.Enabled = False
Sub carica_Strut_Met_Mod()
Dim matrice() As Variant
ReDim matrice(48) As Variant
matrice = Range("Time_Production")
lstStrutMetMod.List = matrice
End Sub
Sub compila_lista_StrutMetMod()
lstStrutMetMod.AddItem
lstStrutMetMod.List(lstStrutMetMod.ListCount - 1, 0) = Cells(r, 31)
'lstStrutMetMod.List(lstStrutMetMod.ListCount - 1, 1) = Cells(r, 32) Non visualizzate
'lstStrutMetMod.List(lstStrutMetMod.ListCount - 1, 2) = Cells(r, 33) Non visualizzate
'lstStrutMetMod.List(lstStrutMetMod.ListCount - 1, 3) = Cells(r, 34) Non visualizzate
lstStrutMetMod.List(lstStrutMetMod.ListCount - 1, 4) = Cells(r, 35)
............. tagliato.........
Fino a qui tutto OK.
-------------------------------------------------------------------------
Poi, alla selezione di uno di questi record si attiva il comando Modifica che attiva la Form sulla quale si caricano i campi della riga selezionata (vedi la sub sotto)
alla riga: frmModificaStrutMetMod.Show
si blocca tutto ed esce l'errore
'Questa rountine ci restituisce tutti i valori conteuti nella riga selezionata all'interno
'della ListBox=lstStrutMetMod. Per fare questo bisogna mettere in relazione un campo
'con la relativa tabella del foglio Excel. Definisco Index_StrucMeth come campo per ricerca.
Private Sub cmdModificaParametro_Click()
For r = 0 To lstStrutMetMod.ListCount - 1
If lstStrutMetMod.Selected(r) = True Then
StrutMetMod_da_modificare = lstStrutMetMod.List(r, 0)
Exit For
End If
Next r
Unload Me
frmModificaStrutMetMod.Show
End Sub
-------------------------------------------------------------------------
Option Explicit
Dim riga_StrutMetMod_da_modificare As Variant
Private Sub cmdConferma_Click()
Dim risposta_modifica_StrutMetMod As Integer
risposta_modifica_StrutMetMod = MsgBox("Sei sicuro di confermare le modifiche eseguite?", vbYesNo)
If risposta_modifica_StrutMetMod = vbYes Then
Sheets("Data_Lists").Activate
Cells(riga_StrutMetMod_da_modificare, 31) = txtNomeStrutMetMod.Value
Cells(riga_StrutMetMod_da_modificare, 32) = cmbStruttura.Value
Cells(riga_StrutMetMod_da_modificare, 33) = cmbFase.Value
Cells(riga_StrutMetMod_da_modificare, 34) = cmbMetodo.Value
Cells(riga_StrutMetMod_da_modificare, 35) = txtMdoPerfo.Value
............. tagliato.........
MsgBox "Modifiche eseguite!"
Unload Me
frmAnagraficaStrutMetMod.Show
End If
End Sub
Private Sub cmdEsci_Click()
Unload Me
frmAnagraficaStrutMetMod.Show
End Sub
'Associa i dati in Data_Lists con i campi per le modifiche
Private Sub UserForm_Initialize()
txtStrutMetMod = StrutMetMod_da_modificare
Sheets("Data_Lists").Activate
Columns("AE:AE").Select
riga_StrutMetMod_da_modificare = Selection.Find(StrutMetMod_da_modificare).Row
txtStrutMetMod = Cells(riga_StrutMetMod_da_modificare, 31)
cmbStruttura = Cells(riga_StrutMetMod_da_modificare, 32)
cmbMetodo = Cells(riga_StrutMetMod_da_modificare, 33)
cmbFase = Cells(riga_StrutMetMod_da_modificare, 34)
txtMdoPerfo = Cells(riga_StrutMetMod_da_modificare, 35)
............. tagliato.........
lblDescrizioneStrutMetMod.Enabled = False
txtStrutMetMod.Enabled = False
End Sub
Ciao. Mi è difficile capire il problema vedendo solo il codice, se vuoi mandami il file a nickthegeek.yt@gmail.com
Ciao, scusa, una curiosità: ma se una colonna della listbox ha un contenuto troppo lungo, è possibile mandarlo a capo?
Ciao, non credo sia possibile, perché la listbox nasce per mostrare liste di oggetti, e non dati che possono raggiungere lunghezza considerevole; forse si può fare con altri controlli aggiuntivi da installare, che però non conosco.
Ciao Nick, proprio ora sto seguendo il video 82 , ma anche con questo sto avendo problemi. Spero di risolverli.
Ciao Nick, a riguardo il mio ultimo commento, sono riuscito a risolvere il problema, si trattava di un errore di battitura, avevo interpretato male il segno di linea con un uguale. Scusa ancora e grazie.
Ciao Nick, 1° errore di run-time 1004 , quando nella userform_inizialize inserisco compila_lista. 2° non funziona la txtfiltro inserisco un carattere e non accade nulla.
Mi dovresti incollare il codice di tutte le subroutine coinvolte, quindi txtFiltro_Change, Userform_Initialize e compila_lista.
Grazie Nick, purtroppo risolto un problema si è presentato un errore del genere "Errore di run-time 381 Impossibile impostare la proprietà List. Indice della matrice di proprietà non valido. Perdonami ma non è molto che utilizzo il VBA. A presto Marzio
ecco!! Già non funziona con la sub compila_lista mi dà errore 1004 ecc.ecc.. non riesco a capire!
Immagino che parli del video 82; mi dovresti dire:
1) quale riga fa scattare l'errore
2) il messaggio completo di errore, perché il codice 1004 ha diverse descrizioni
3) quando ti compare l'errore, cioè facendo cosa (ad esempio aprendo la userform, modificando il filtro, etc.)
Inoltre dovresti incollare qui nei commenti il codice di tutte le subroutine coinvolte, quindi txtFiltro_Change, Userform_Initialize e compila_lista.
Ciao Nick, ho copiato il tuo codice ed ora funziona, ma devo capire perché il mio non funziona.
Ciao Nick anche a me prendendo il tuo codice mi da la lista in bianco
Ciao Riccardo, hai copiato esattamente il mio codice su un tuo file uguale al mio? In tal caso dovrebbe funzionare, casomai mandami il file a nickthegeek.yt@gmail.com, ma non potrò guardarlo tanto presto.
un solo commento....grazie per quello che fai sei bravissimo
Grazie a te per il commento.