Condividi:        

Valori di varie Textbox ordinati in una riga

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

Valori di varie Textbox ordinati in una riga

Postdi RaeleaR » 26/09/14 09:23

Salve a tutti,
ho letto alcuni post relativi al mio problema e decisamente ho capito varie cose, tuttavia mi sfugge la risoluzione al mio problema.

Ho una Userform con 13 textbox i cui valori devono essere trasferiti in ordine (da text1 a text13) nella prima riga libera di un foglio, con un CommandButton..

In altre parole nelle celle dalla A1 alla O1 dovranno finirci i dati delle textbox dalla 1 alla 13.. All'immissione succesiva i nuovi dati delle 13 textbox dovranno essere scritti nelle celle dalla A2 alla O2.. e cosí via..

Come faccio?
Qualcuno puó aiutarmi?

Grazie a tutti anticipatamente

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: Valori di varie Textbox ordinati in una riga

Postdi RaeleaR » 01/10/14 15:19

É orribile lo so.. peró forse dá piú chiaramente l'idea di ció che voglio fare..
Qualcuno mi da una mano?

Codice: Seleziona tutto
Private Sub CommandButton1_Click()
    Dim r As Integer

    r = Sheets("DB_LIBROS").Range("C65536").End(xlUp).Row + 1

    Sheets("DB_LIBROS").Cells(r, 3) = TextBox1.Text
    Sheets("DB_LIBROS").Cells(r, 4) = TextBox2.Text
    Sheets("DB_LIBROS").Cells(r, 5) = TextBox3.Text
    Sheets("DB_LIBROS").Cells(r, 6) = TextBox4.Text
    Sheets("DB_LIBROS").Cells(r, 7) = TextBox5.Text
    Sheets("DB_LIBROS").Cells(r, 8) = TextBox6.Text
    Sheets("DB_LIBROS").Cells(r, 9) = TextBox7.Text
    Sheets("DB_LIBROS").Cells(r, 10) = TextBox8.Text
    Sheets("DB_LIBROS").Cells(r, 11) = TextBox9.Text
    Sheets("DB_LIBROS").Cells(r, 12) = TextBox10.Text
    Sheets("DB_LIBROS").Cells(r, 13) = TextBox11.Text
    Sheets("DB_LIBROS").Cells(r, 14) = TextBox12.Text
    Sheets("DB_LIBROS").Cells(r, 15) = TextBox13.Text
    Sheets("DB_LIBROS").Cells(r, 16) = TextBox14.Text
    Sheets("DB_LIBROS").Cells(r, 17) = TextBox15.Text
   
    TextBox1.Text = ""
    TextBox2.Text = ""
    TextBox3.Text = ""
    TextBox4.Text = ""
    TextBox5.Text = ""
    TextBox6.Text = ""
    TextBox7.Text = ""
    TextBox8.Text = ""
    TextBox9.Text = ""
    TextBox10.Text = ""
    TextBox11.Text = ""
    TextBox12.Text = ""
    TextBox13.Text = ""
    TextBox14.Text = ""
    TextBox15.Text = ""
   
    Quest = MsgBox("Deseas cargar otro libro?", vbYesNo, "Puestos de Libros")
              If Quest = vbYes Then
                 TextBox1.SetFocus
                ElseIf Quest = vbNo Then
                MsgBox "Apreta el boton Salir", vbOKOnly, "Puestos de Libros"
                End If
'              End If
                   
    End Sub

Private Sub CommandButton2_Click()
    ActiveWorkbook.Save
    Unload UserForm3
    Sheets("MENU").Select
End Sub


Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    X = Len(TextBox1)
        If X <> 13 Then
          MsgBox "El codigo ISBN se compone de 13 digitos", vbOKOnly, "Puestos de Libros"
        End If
       TextBox1.EnterFieldBehavior = fmEnterFieldBehaviorRecallSelection      'Con questa riga vorrei che, se l'utente digita meno di 13 numeri e si sposta al textbox successivo, il cursore ritorni nel textbox1 dopo l'ultimo numero immesso... ma non funziona ne' dentro l'If ne' qui fuori... suggerimenti?

End Sub


Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  Select Case KeyAscii
    Case 48 To 57: Case Else: KeyAscii = 0
    Beep
    MsgBox "Ingresar solo digitos", vbOKOnly, "Puestos de Libros"
  End Select
End Sub



EDIT Flash 02/10/2014 ore 1:10 - Inserito codice Vba nel Tag Code dell'editor per migliorare la lettura
Rael
Win 8.1 - Office 2010 Esp
Avatar utente
RaeleaR
Utente Junior
 
Post: 70
Iscritto il: 26/09/14 08:55
Località: Argentina

Re: Valori di varie Textbox ordinati in una riga

Postdi Flash30005 » 02/10/14 01:08

Ciao RaeleaR e benvenuto nel Forum

La tua macro funziona (credo) e se così non ha bisogno di migliorie
Se proprio vuoi, puoi sostituire la prima parte, relativa all'inserimento dati e cancellazione dei TextBox con questo codice lasciando il rimanete codice da te redatto
Codice: Seleziona tutto
Private Sub CommandButton1_Click()
Dim r As Integer
Dim ctr As MSForms.Control
MyCol = 2
    r = Sheets("DB_LIBROS").Range("C65536").End(xlUp).Row + 1
        With UserForm1
         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
     End With
     Set ctr = Nothing
     
     '<<<< prosegui con gli altri controlli
     '...
End Sub


ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Valori di varie Textbox ordinati in una riga

Postdi Anthony47 » 02/10/14 01:20

Mi permetto anche io di suggerire che, se funziona, va bene come l' ha scritta Rael; al massimo la prossima metti un With Sheets("DB_LIBROS") / End With e cosi' risparmi qualche battitura sulla tastiera.
Il loop funziona oggi, ma appena cancelli un controllo e lo sostituisci con uno analogo, o cambi l' ordine dei textbox, allora va tutto a pallino...

Ciao a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Valori di varie Textbox ordinati in una riga

Postdi RaeleaR » 04/10/14 20:00

Vi ringrazio per il chiarimento, Flash30005 & Anthony47, e per il benvenuto..

@Flash30005 :
ho inserito il tuo codice e funziona benissimo.. mi sembra molto piú elegante e professionale di tutte quelle righe che avevo inserito io..

@Anthony47 :
peró se non ho inteso male, al sostituire un controllo o invertire l'ordine di quelli esistenti, basterebbe rinominarli rispettando la progressione che c'é adesso nello UserForm.. é corretto?

Adesso vorrei proporre un altro quesito, sempre inerente lo stesso UserForm:

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 quindi 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 di Flash30005 vedo che 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 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?

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

Re: Valori di varie Textbox ordinati in una riga

Postdi Zer0Kelvin » 04/10/14 20:46

Ciao.
Trattandosi di un quesito completamente diverso, sarebbe opportuno aprire un nuovo post.
In questo modo aumentano le probabilità di ricevere risposte da utenti che non erano interessati a rispondere al post corrente.
[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: 388
Iscritto il: 08/04/12 11:23

Re: Valori di varie Textbox ordinati in una riga

Postdi RaeleaR » 04/10/14 21:01

Hai ragione Zer0Kelvin

lo faccio subito.

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: Valori di varie Textbox ordinati in una riga

Postdi Anthony47 » 16/10/14 14:03

Avevo detto che puo' andare tutto a pallino perche' il ciclo For Each ctr In .Controls scansiona i controlli secondo il loro "indice", che e' la sequenza con cui sono stati creati; quando cancelli un textbox e ne crei uno nuovo, questo appena creato sara' l' ultimo della serie, anche se tu lo chiami come quello che avevi rimosso. Insomma cambia la sequenza di scansione, da cui deriva il rischio di inserire il dato giusto nella colonna sbagliata, o i dato sbagliato nella colonna giusta...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Valori di varie Textbox ordinati in una riga":


Chi c’è in linea

Visitano il forum: Nessuno e 78 ospiti