Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

vba : shiftare valori di textbox

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

vba : shiftare valori di textbox

Postdi karug64 » 04/08/16 19:06

Salve a tutti.
Nel mio form ho sei controlli textbox (ambito1, ambito2, ambito3, ambito4, ambito5, ambito6)
Ho poi un combobox da cui prelevo i valori da assegnare ai vari textbox.

Vorrei creare una routine che inserita nell'evento change controlli il contenuto dei textbox e li "sposti" in modo da riempire sempre i primi.

Esempio:
ambito1 = "A"
ambito2= ""
ambito3 = "B"
ambito4=""
ambito5=""
ambito6="C"

dopo il passaggio della routine il risultato dovrebbe essere:

ambito1 = "A"
ambito2= "B"
ambito3 = "C"
ambito4=""
ambito5=""
ambito6=""

In questo modo posso identificare immediatamente quale textbox avvalorare col valore della combo.

Inoltre, nell'ipotesi in cui ci siano valori uguali, vanno esclusi i doppioni.

Esempio:
ambito1 = "A"
ambito2= ""
ambito3 = "B"
ambito4="C"
ambito5=""
ambito6="C"

dopo il passaggio della routine il risultato dovrebbe essere:

ambito1 = "A"
ambito2= "B"
ambito3 = "C"
ambito4=""
ambito5=""
ambito6=""

Il risultato potrebbe essere raggiunto con una miriade di if ... endif, ma immagino che con dei giusti cicli for si potrebbe ottenere un risultato più immediato.

Grazie
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22

Sponsor
 

Re: vba : shiftare valori di textbox

Postdi Anthony47 » 05/08/16 00:09

Non ho capito quale e' il tuo processo, comunque io metterei sui textbox6-2 (non su Textbox1) una gestione di TextBox_Change di questo tipo:
Codice: Seleziona tutto
Private Sub Ambito6_Change()
myi = 6
upper = "Ambito" & (myi - 1)
If UserForm1.Controls(upper).Text = "" And UserForm1.Controls("Ambito" & myi).Text <> "" Then
    UserForm1.Controls(upper).SetFocus
    UserForm1.Controls(upper).Text = UserForm1.Controls("Ambito" & myi).Text
    UserForm1.Controls("Ambito" & myi).Text = ""
End If
End Sub

Le prime due righe sono diverse per ogni sub.
Questo dovrebbe consentire di spostare le scritte sul textbox superiore, se vuoto.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba : shiftare valori di textbox

Postdi karug64 » 05/08/16 00:43

Innanzitutto grazie per la risposta immediata.

Cerco di esporre meglio la problematica:
come si può vedere dalla immagine allegata

Immagine

dall'elenco a discesa del del campo in bianco seleziono dei valori. Una volta selezionato, il valore va messo nelle textbox vuote.

La soluzione che mi hai suggerito è perfetta per gestire la situazione che si verifica se l'utente decide di scrivere direttamente nelle textbox, ma se il valore va scelto dal combo e da questo assegnato via codice, l'evento change delle texbox non viene scatenato e quindi i valori non si riordinano.
In ogni caso, per poter riordinare bisognerebbe fare un change per ogni texbox, a me servirebbe, invece una routine che ad ogni assgnazione, controllasse tutti i texbox, li spittasse verso l'alto ed eliminasse i duplicati .....

Spero di essermi spiegato.

Grazie
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22

Re: vba : shiftare valori di textbox

Postdi Marius44 » 05/08/16 17:07

Ciao
visto che non hai inserito il file bensì un'immagine, mi sono costruito qualcosa che assomiglia ad essa.
Quello che esponi nel primo post NON dovrebbe accadere se, come dici, "Ho poi un combobox da cui prelevo i valori da assegnare ai vari textbox."
Nell'esempio che allego ho inserito i nomi dei mesi nel combo e, quando ne seleziono uno, inserisce quel mese nella prima TextBox vuota che trova.
Riconosco che non è perfetto ma puoi cercare di adattarlo alle tue esigenze,
La macro associata all'evento Change di ComboBox1 è la seguente:
Codice: Seleziona tutto
Private Sub ComboBox1_Change()
Dim nTxt As Integer
For nTxt = 1 To 6
    If Me.Controls("TextBox" & nTxt).Text = "" Then
        Me.Controls("TextBox" & nTxt).Text = ComboBox1.Text
        Exit For
    End If
Next nTxt
End Sub

https://www.dropbox.com/s/243p5p8c5in4xym/ProvaComboText.xlsm?dl=0

Prova e fai sapere. Ciao,
Mario
Marius44
Utente Senior
 
Post: 142
Iscritto il: 07/09/15 22:00


Torna a Applicazioni Office Windows


Topic correlati a "vba : shiftare valori di textbox":


Chi c’è in linea

Visitano il forum: Marius44 e 9 ospiti