Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Come usare TextBox, ComboBox e GotFocus

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

Come usare TextBox, ComboBox e GotFocus

Postdi RaeleaR » 04/10/14 21:18

Salve a tutti,

seguendo il suggerimento di Zer0Kelvin ho spostato qui il seguito di un precedente Topic.

Avrei bisogno di aiuto e chiarimenti..

Ho creato un UserForm per l'immissione di dati inerenti libri. Con un ciclo invio il contenuto dei miei TextBox in un foglio chiamato "DB_LIBROS".

....codice...
For Each ctr In .Controls
If TypeOf ctr Is MSForms.TextBox Then
MyCol = MyCol + 1
Sheets("DB_LIBROS").Cells(r, MyCol) = ctr.Text
ctr.Text = ""
End If
Next
...codice....

poiché alcuni TextBox richiedono l'immissione di dati che potrebbero essere giá stati inseriti in precedenza per altri libri (es.: Autor, Editor, Proveedor, ecc.), ...(lo spagnolo é perché vivo in Argentina :) )..
pensavo di creare un "Foglio_Dati" dove immetto in colonne questi dati, dando, nel 'RowSource' del Control, l'opportuna referenza. Ho quindi creato i miei ComboBox..

Primo quesito : ho capito male o il ComboBox mi da la possibilitá di aggiungere anche un dato che non sia ancora presente nella sua lista? (ho giá impostato nel RowSource un range che contiene giá delle celle vuote proprio per questo scopo). Se questo é vero, la volta successiva il ComboBox mi presenterá una lista aggiornata col mio nuovo dato, esatto?

Secondo quesito : nel codice sono considerati i soli TextBox (If TypeOf ctr Is MSForms.TextBox...); quindi ho pensato di aggiungere un ComboBox al lato dei TextBox per i quali l'immissione si fa da una lista, volendo poi creare una istruzione opportuna per il TextBox che ne impedisca la digitazione e che assegni il suo valore uguale alla scelta fatta nella lista del ComboBox.
Non ho peró idea di come impedire di scrivere nel TextBox.

Terzo quesito :) ...posso? :)

Volendo strafare.. mi sono detto.. "Inizializzo lo UserForm con tutte le ComboBox.Visible = False e al GotFocus di ciascun TextBox le faccio apparire"..

Private Sub UserForm_Initialize()
ComboBox1.Visible = False
ComboBox2.Visible = False
ListBox1.Visible = False
End Sub

e poi quindi, per esempio...

Private Sub TextBox3_GotFocus()
ComboBox1.Visible
Set TextBox3.Value = ComboBox1.Value
End Sub

ma sembra che non gli piaccia la mia istruzione.. a questo punto mi sa che non ho capito come si assegna il Focus; pensavo che quando il cursore si sposta su un TextBox questi ne riceve il Focus, ma non deve essere cosí.. Il mio ComboBox1 resta invisibile..
Come faccio?

É possibile fare tutto ció che ho esposto? e come?

Grazie a tutti per la pazienza e scusate la lungaggine..


Rael
Rael
Win 8.1 - Office 2010 Esp
Avatar utente
RaeleaR
Utente Junior
 
Post: 70
Iscritto il: 26/09/14 08:55
Località: Argentina

Sponsor
 

Re: Come usare TextBox, ComboBox e GotFocus

Postdi Zer0Kelvin » 04/10/14 21:54

Ciao.
Dato che il quesito è piuttosto articolato, sarebbe molto meglio avere a disposizione un file di esempio con la userform che hai realizzato e le diverse aree collegate.
Comunque comincio a rispondere ad alcune "parti" del quesito.

Codice: Seleziona tutto
Private Sub TextBox3_GotFocus()
ComboBox1.Visible
Set TextBox3.Value = ComboBox1.Value
End Sub

ma sembra che non gli piaccia la mia istruzione

TextBox_GotFocus non esiste come evento, devi usare TextBox3_Enter.

ho capito male o il ComboBox mi da la possibilitá di aggiungere anche un dato che non sia ancora presente nella sua lista?
Se si inizializza la combobox tramite RowSource, non è possibile nè modificare nè aggiungere elementi alla lista e comunque la combobox è stata pensata solamente per permettere la selezione di un elemento della lista.
Questa parte andrà riprogettata.

Non ho peró idea di come impedire di scrivere nel TextBox.

Per impedire la scrittura in una textbox si può settare a True la proprietà Locked; se non hai necessità di scriverci potresti anche usare una Label al posto della Textbox.

A parte questo ribadisco che senza "toccare con mano" il file, può essere difficile fornire soluzioni valide.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 305
Iscritto il: 08/04/12 11:23

Re: Come usare TextBox, ComboBox e GotFocus

Postdi RaeleaR » 04/10/14 23:15

perdonami Zer0Kelvin, ma come posto lo UserForm? come immagine?
Rael
Win 8.1 - Office 2010 Esp
Avatar utente
RaeleaR
Utente Junior
 
Post: 70
Iscritto il: 26/09/14 08:55
Località: Argentina

Re: Come usare TextBox, ComboBox e GotFocus

Postdi RaeleaR » 04/10/14 23:16

come posso postare un file?
Rael
Win 8.1 - Office 2010 Esp
Avatar utente
RaeleaR
Utente Junior
 
Post: 70
Iscritto il: 26/09/14 08:55
Località: Argentina

Re: Come usare TextBox, ComboBox e GotFocus

Postdi Zer0Kelvin » 05/10/14 08:37

Ciao.
No, niente immagini, servono gli oggetti ed il relativo codice.
Per allegare il file si può usare un sito di hosting; uno dei più facili da usare è
http://www.filedropper.com/
è sufficiente cliccare su [Upload file] e selezionare il file da caricare.
Al termine dell'upload avrai a disposizione un link al file caricato; inserisci il link nel post ed il gioco è fatto.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 305
Iscritto il: 08/04/12 11:23

Re: Come usare TextBox, ComboBox e GotFocus

Postdi ricky53 » 06/10/14 11:32

Ciao,
leggi quanto ti ha scritto 0°K che in sintesi e quanti c'è
QUI dove trovi come operare insieme a dei consigli
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Come usare TextBox, ComboBox e GotFocus

Postdi RaeleaR » 06/10/14 21:33

Grazie a tutti per i suggerimenti ..

Solo per riepilogare, in questa fase del progetto voglio immagazzinare dati di libri in un foglio Excel tramite un Userform.
Vorrei, peró, che l'utente non dovesse digitare ogni volta in quei Control che possono avere dati ripetitivi (es.: Editor, Proveedor, ecc.). Allo stesso modo vorrei che se il nome Editore non fosse giá presente nella lista proposta dal Control, l'utente potesse inserirlo in un TextBox per poi trovarlo nel relativo control ed inserirlo.
Infine tutti i dati vengono inviati in ordine nella prima riga libera del foglio Dati_Libri.

Questo è ciò che sono riuscito a fare..
É un file di prova per non pasticciare sulla "bellacopia" :roll: .. quindi l'ho semplificato lasciando solo ció che mi interessava approfondire per adesso.

http://www.filedropper.com/libro1mod0

Ho risolto alcuni dubbi che avevo manifestato all'apertura del Topic e che desidero riepilogare qui di seguito anche per mettere a fuoco quelle aree per le quali forse le soluzioni adottate non mi sembrano particolarmente ortodosse (pur funzionando) e per le quali vi chiedo consigli per migliorarle, non solo esteticamente, ma anche dal punto di vista della funzionalitá all'interno di un progetto piú ampio.

1) "Primo quesito : ho capito male o il ComboBox mi da la possibilitá di aggiungere anche un dato che non sia ancora presente nella sua lista?" -----> No, non consente di farlo (almeno questo mi sembra di aver capito..)
Quindi ho risolto in questo modo..

Per prima cosa ho creato un foglio di raccolta dati (Hoja2) assegnando un nome alle celle che mi servono. Poi ho inizializzato la mia UserForm in questo modo..

Private Sub UserForm_Initialize()

Dim rango, rango1, rango2, celda As Range
Set rango = Range("MiLista")
Set rango1 = Range("Forni")
Set rango2 = Range("Datalist")
For Each celda In rango
ComboBox1.AddItem celda.Value
Next celda
For Each celda In rango1
ComboBox2.AddItem celda.Value
Next celda
For Each celda In rango2
ComboBox3.AddItem celda.Value
Next celda
End Sub

(questo codice funziona, ma sono sicuro che si possa scrivere in modo piú elegante.. suggerimenti??)

2) Ho risolto il problema del secondo quesito in questo modo..

Private Sub CommandButton1_Click()

Dim r As Integer
Dim ctr As MSForms.Control
r = Sheets("Hoja3").Range("C65536").End(xlUp).Row + 1
With UserForm1
For Each ctr In .Controls
If ctr.Tag <> "" Then
Sheets("Hoja3").Cells(r, CInt(ctr.Tag)) = ctr.Text
ctr.Text = ""
End If
Next
End With
Set ctr = Nothing

----> segue codice..

mentre l'immissione di un nome non presente nella lista che propone un Control, l'ho risolto con un nuovo UserForm.. in questo modo

Private Sub CommandButton1_Click()
Dim r As Integer
r = Sheets("Hoja2").Range("D65536").End(xlUp).Row + 1
With UserForm2
If TextBox1.Text = "" Then
MsgBox "Ingresar el nombre del nuevo Editor", vbOKOnly, "Puesto de Libros"
Else
Sheets("Hoja2").Cells(r, 4) = TextBox1.Text

End If
End With

With UserForm1
Dim rango, celda As Range
Set rango = Range("MiLista")
For Each celda In rango
UserForm1.ComboBox1.AddItem celda.Value
Next celda
End With

Unload UserForm2
UserForm1.ComboBox1.SetFocus

End Sub

...anche qui mi chiedo se, pur funzionando, il codice possa essere scritto in forma meno macchinosa... Suggerimenti?

Ringrazio anticipatamente per la pazienza, scusandomi se sono stato lungo, e quanti mi proporranno le loro correzioni.

Saluti

Rael
Rael
Win 8.1 - Office 2010 Esp
Avatar utente
RaeleaR
Utente Junior
 
Post: 70
Iscritto il: 26/09/14 08:55
Località: Argentina

Re: Come usare TextBox, ComboBox e GotFocus

Postdi RaeleaR » 06/10/14 21:53

...avevo dimenticato...

Ciò che non sono riuscito a risolvere è fare in modo che le date finiscano nel mio Control nel loro formato di origine.
L'unico modo che ho incontrato è stato anteporre alla data un apostrofo, ma, mentre nella lista del Control le vedo corrette, quando le trasferisco al foglio destinazione, alcune cambiano.. 04/01/2014 nella lista, diventa 01/04/2014 nel foglio destinazione..
Come posso fare?
Rael
Win 8.1 - Office 2010 Esp
Avatar utente
RaeleaR
Utente Junior
 
Post: 70
Iscritto il: 26/09/14 08:55
Località: Argentina

Re: Come usare TextBox, ComboBox e GotFocus

Postdi RaeleaR » 08/10/14 16:14

Risolto anche la data
Rael
Win 8.1 - Office 2010 Esp
Avatar utente
RaeleaR
Utente Junior
 
Post: 70
Iscritto il: 26/09/14 08:55
Località: Argentina

Re: Come usare TextBox, ComboBox e GotFocus

Postdi Zer0Kelvin » 09/10/14 09:00

Ciao.
Non è che ci siano grandi cose da modificare.
in
Codice: Seleziona tutto
    Load UserForm1
    UserForm1.Show
Load UserForm1 è superflua, l'userform viene caricata automaticamente da Excel non appena si fà riferimento ad essa.
In Userform1
Codice: Seleziona tutto
Private Sub UserForm_Initialize()

Dim rango, rango1, rango2, celda As Range
Set rango = Range("MiLista")
Set rango1 = Range("Forni")
Set rango2 = Range("Datalist")
    For Each celda In rango
        ComboBox1.AddItem celda.Value
    Next celda
      For Each celda In rango1
          ComboBox2.AddItem celda.Value
      Next celda
        For Each celda In rango2
            ComboBox3.AddItem celda.Value
        Next celda
End Sub

Può essere riscritta così
Codice: Seleziona tutto
Private Sub UserForm_Initialize()
    ComboBox1.List = Range("MiLista").Value
    ComboBox2.List = Range("Forni").Value
    ComboBox3.List = Range("Datalist").Value
End Sub

Per quanto riguarda le date VBA ha un comportamento ambiguo.
Se deve, le interpreta correttamente; se può, le interpreta come date in formato AMERICANO (che SECONDO LORO è il formato standard).
Exce invece le interpreta sempre nel formato impostato, Europeo nel nostro caso, ciè quello utilizzato nella MAGGIOR PARTE del mondo).
La data 31/12/2014 viene interpretata correttamente, mentre 01/05/2014 viene interpretata come cinque gennaio!
Il problema è risolvibile in diverse maniere, ma nel tuo caso, visto che non devi compiere operazioni con le date, è sufficiente formattare le celle contenenti le date come testo.
Per la cronaca, il formato data internazionale è Anno/mese/giorno.
La sub Worksheet_Change in modulo1 può essere cancellata (Worksheet_Change comunque và inserita nel modulo di codice del foglio interessato dalla modifica).
Poi:
In userform2 modifica così
Codice: Seleziona tutto
Private Sub CommandButton1_Click()
Dim r As Long
    r = Sheets("Hoja2").Range("D65536").End(xlUp).Row + 1
    If TextBox1.Text <> "" Then
        Sheets("Hoja2").Cells(r, 4) = Me.TextBox1
        UserForm1.ComboBox1.AddItem Me.TextBox1
        Me.Hide
        UserForm1.ComboBox1.SetFocus
    Else
       MsgBox "Ingresar el nombre del nuevo Editor", vbOKOnly, "Puesto de Libros"
    End If
End Sub

Mi sembra che non ci si altro di importante, eventualmente fai sapere...
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 305
Iscritto il: 08/04/12 11:23


Torna a Applicazioni Office Windows


Topic correlati a "Come usare TextBox, ComboBox e GotFocus":


Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti