TextBox2 spiegazione codice di Alfredo
Hai un problema con Excel? 
TextBox2 - spiegazione codice di Alfredo
di Ronciglione data: 20/06/2016 21:47:30
Ciao Alfredo,
ho dovuto aprire un nuovo topic percè non mi dava più l'opportunità di rispondere!
Il mio nome è Federico, non ti piace Ronciglione? sembra un topo dei cartoni animati vero?
Nel week end poi ho riguardo ancora quello tuo vecchio e ci sono alcuni passaggi che fatico a capire ancora....
Dim Righe, Colonne, R, C
perchè non gli attribuisci una variabile ben precisa?, così facendo, sbaglio o le fai intendere come "matrici" (gruppi di celle?)
Worksheets("Foglio2").Select
With Range("A2").CurrentRegion
Perch+ il foglio due e non il primo, dove c'è la lista dei prodotti?
Set Intervallo = .Offset(0, 0).Resize(Righe, Colonne)
Tu imposti questo intervallo con Offset perchè? a che fine?
For R = 1 To Righe
.AddItem
For C = 1 To Colonne
.List(R - 1, C - 1) = Intervallo(R, C)
anche qui non ho capito
Di almeno che questo codice è difficile, così non mi fai sentire stupido...
di patel data: 20/06/2016 22:21:04
perché aprire una nuova discussione e non continuare quella in cui c'era il codice e magari il file allegato e si capiva qual'era il problema ?
di alfrimpa data: 21/06/2016 10:38:50
Perchè la precedente discussione è finita nello storico quindi senza file e senza la possibilità di rispondere.
Alfredo
di patel data: 21/06/2016 11:02:26
perché non so leggere ? c'era scritto all'inizio nel primo post ...
di alfrimpa data: 21/06/2016 11:37:45
Cit. "perché non so leggere ? c'era scritto all'inizio nel primo post ... "
Certo mica ho detto questo
Alfredo
di Ronciglione data: 21/06/2016 13:34:29
non ho capito l'intervento di Patel nonostante avessi scritto la motivazione dell'apertura di un nuovo topic...
se si può riapire la precedente, ben lieto di continuare là...
di alfrimpa data: 21/06/2016 13:47:39
Ciao Federico
Andiamo per gradi.
Cit. “Dim Righe, Colonne, R, C perchè non gli attribuisci una variabile ben precisa?, così facendo, sbaglio o le fai intendere come "matrici" (gruppi di celle?)”
Per dichiarare variabili matrici si fa in una latro modo; sebbene sia sempre consigliabile dichiarare il tipo se non lo si fa la variabile assume il tipo di dato che trova sul foglio (string, integer o altro).
Cit. “Worksheets("Foglio2").Select
With Range("A2").CurrentRegion
Perchè il foglio due e non il primo, dove c'è la lista dei prodotti?”
Se mi chiedi questo devo pensare che non hai guardato bene il mio file.
Nel foglio 2 io ho inserito le “categorie” quelle che servono ad alimentare la listbox2 (quella in alto)
Questa istruzione: Set Intervallo = .Offset(0, 0).Resize(Righe, Colonne) serve a delimitare l’intervallo nel tuo caso 4 righe e due colonne.
Avrei anche potuto usare l’istruzione Set Intervallo = Range(“a1:b” & ur) ed avrei avuto lo stesso risultato.
Questo ciclo
For R = 1 To Righe
.AddItem
For C = 1 To Colonne
.List(R - 1, C - 1) = Intervallo(R, C)
Serve ad aggiungere alla listbox2 I valori dell’intervallo A2:B4 del foglio2
Però tutte queste spiegazioni vanno inquadrate tenendo conto di tutto il codice contenuto nel file e non so fino a che punto tu possa comprenderle fino in fondo.
Spero che tu possa fare un passo avanti.
Alfredo
P.S. Si il codice non è facile quindi non devi sentirti uno stupido
di Ronciglione data: 22/06/2016 00:03:52
Ciao Alfredo, grazie per la risposta.
In effetti avevo inteso alcune cose in una maniera un po superficiale.
Ci do un occhiata più approfonditamente!
di patel data: 22/06/2016 07:34:34
Ronciglione ha scritto:
non ho capito l'intervento di Patel nonostante avessi scritto la motivazione dell'apertura di un nuovo topic...
perché non ho letto bene, infatti subito dopo ho scritto:
perché non so leggere ? c'era scritto all'inizio nel primo post ...
di Ronciglione data: 25/06/2016 18:24:48
Alfredo non capisco più nulla ormai...sono molto abbattuto
di alfrimpa data: 25/06/2016 22:32:56
In che senso Federico.
Non hai capito il codice o il file non funziona come ti aspetti/dovrebbe.
Se è il primo problema non ti abbattere è normale; imparare il VBA non si fa dall'oggi al domani. Lo si fa con impegno, costanza ed anche passione.
Pensa che io sino a circa tre anni fa del VBA ne conoscevo a malapena l'esistenza; poi pian piano acquistando testi e studiandoli, provando e riprovando e seguendo Internet qualcosina l'ho imparata
Se è il file a non funzionare specifica cosa non va e vediamo.
In ogni caso ti pregherei di essere un po' più assiduo sul forum; se tra un tuo intervento e l'altro passano giorni è difficile mantenere il filo del discorso.
Aspetto tue.
Alfredo
di Ronciglione data: 26/06/2016 12:48:00
Eh se riuscissi, scriverei con maggiore frequenza quello mi piacerebbe...
Il File va bene, questo è fuori discussione, anche se diciamo che per pura comodità sarebbe meglio avere tutto in uno stesso fogli, ovvero...
Quando si popola la listbox1, che prende il nome delle categoria dal Foglio 2, lo vorrei che le prendesse dal foglio 1; in maniera da avere il foglio 2 completamente vuoto
Poi per fortuna che mi hai messo la scrittura alternativa del "Set Intervallo" perchè come l'hai scritta tu, io già vagavo nel nulla assoluto.
Poi preso dallo sconforto, ho guardato l'altra parte del codice, e ho pensato lo completo con la cosa più semplice: l'inserimento dati nel foglio, con un ciclo Do Until
ma quando è stato il momento di scrivere questo codice, che è basilare diciamo, mi sono bloccato perchè non riuscivo a far in modo che l'inserimento dati avvenisse solo in un range di celle ben definite. E penso che sia la cosa più semplice da fare.
Da lì poi mi è arrivato lo sconforto totale....
Allora se questo è il codice
j = 1
Do Until Cells(j, 5) = Empty
With Sheets("Foglio2")
.Cells(j, 2) = Cells(j, 2).Value
End With
j = j + 1
Loop
e metto in "Empty & j < 5" perchè non funziona???
Non sto dicendo che deve controllare che dalla riga J colonna 5 se è vuoto e J deve essere inferiore di 5? quindi tutte le righe comprese da 1 a 4 vanno bene per inserire dati, perchè non funziona? mi sembra una cosa tanto elementare.
Poi gli volevo mettere anche il fatto che se superava venisse fuori un messaggio, ma almeno circoscrivere l'area di inserimento mi sembrava una cosa così basilare, e invece...nulla---uff!!!
di alfrimpa data: 26/06/2016 13:56:19
Ciao Federico
Ora sono fuori e non ho il pc.
Onestamente non ho capito bene cosa dovrebbe fare il codice che hai scritto.
Riesci a spiegarlo meglio riferendoti ai dati che hai sul foglio2?
Alfredo
di Ronciglione data: 26/06/2016 16:26:59
1) Parto da quella che volevo fare io e credevo fosse semplice, ovvero inserire i dati scelti nella ListBox2 e nella Textbox2 e 3.
Però questi dati dovrebbero comparire sul foglio nel range G12:H18 quindi se inserisco più di sei articoli dovrebbe restituirmi un messaggio in cui dice numero max di articoli raggiunti
Per fare questo avevo pensato ad un ciclo Do Until
2) Quando popoli la listbox1 con le categorie prese dal foglio 2, questo mi piacerebbe che le categorie venissero prese nel foglio1 in modo che il foglio due sia pulito ed utilizzabile solo per inserimento articoli. Mantendo però l'opportunità di inserire quante categorie voglio!
Non mi accontento mai vero....
di alfrimpa data: 26/06/2016 16:51:35
Il foglio2 l'ho messo per ragioni, diciamo così, di servizio.
Ma scusa cosa ti impedisce di inserire un terzo foglio per gli ordini?
Per il primo problema ci dobbiamo riaggiornare.
Alfredo
di Ronciglione data: 26/06/2016 22:16:26
Si per praticità suppongo, io dicevo così perchè magari si teneva tutto in unico foglio era più curato, ma non c'è nessun problema, eventualmente si nasconde il foglio!
di alfrimpa data: 27/06/2016 12:17:42
Ciao Federico
Scusa ma non capisco nel tuo file la listbox3 non c'è.
Quando parli di G12:H18 di quale foglio si tratta?
Non puoi allegare un file in cui spieghi bene quello che vuoi fare?
Alfredo
P.S. Poiché credo che la cosa possa andare per le lunghe non hai per caso una mail che puoi mettere qui sul forum (magari cancellandola dopo che ne ho preso nota) in modo che ti possa contattare direttamente? So che ci sono delle mail temporanee (ma non le ho mai usate).
di alfrimpa data: 27/06/2016 14:46:13
Ciao Federico
Ti ho allegato un piccolo file con la macro che vedi sotto e una userform con textbox e commandbutton
Il pulsante ti consente ad ogni clic di inserire i valori nel range A1:A5 solo se il numero dei dati presenti nel range è inferiore a 5.
In caso contrario ti dà il messaggio "Intervallo pieno".
Non so se ho capito bene se questo era il tuo obiettivo.
Alfredo
Private Sub CommandButton1_Click()
Dim ur As Long
Dim num As Long
ur = Cells(Rows.Count, 1).End(xlUp).Row
num = Application.WorksheetFunction.CountA(Range("a1:a5"))
If num < 5 Then
If Range("a1").Value = "" Then
Range("a" & ur) = Me.TextBox1.Value
Else
Range("a" & ur + 1) = Me.TextBox1.Value
End If
Else
MsgBox "Intervallo pieno"
End If
End Sub |
di Ronciglione data: 27/06/2016 22:59:37
wow!
Inchino! grazie
Alfredo, come posso darti la mia e-mail? se tu riesci, domani alle 22:00 mi collego e ti scrivo la mail poi la cancello, scrivo alle 22 perchè magari se navighi in quell'ora la metto e poi la tolgo a breve
di alfrimpa data: 27/06/2016 23:14:19
Grazie dell'inchino
A domani alle 22.00
Alfredo
di Ronciglione data: 28/06/2016 22:07:34
alfredo ci sei?
di alfrimpa data: 28/06/2016 22:13:35
Si scrivi pure
di Ronciglione data: 28/06/2016 22:18:13
dimmi qualcosa quando l'hai presa
di alfrimpa data: 28/06/2016 22:21:15
Presa cancella pure
di alfrimpa data: 28/06/2016 22:28:09
Ti ho inviato mail con i miei contatti
Vuoi Approfondire?