Excel e gli applicativi Microsoft Office Creare tante textbox quanto è il valore (x3)

Login Registrati
Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
  • Autore
    Articoli
  • #19979 Score: 0 | Risposta

    Gret
    Partecipante

      Buondì a tutti voi,

      spero possiate aiutarmi con il mio problema..

      Ci sarebbe per caso la possibilità di creare le textbox (naturalmente da un'altra userform) inserendo un valore in un imputbox?

      Io praticamente ho un userform e qui vorrei che ci sia un pulsante che se cliccato mi apre l'imputbox...qualsiasi valore io scriva mi crea tot textbox. Esempio: clicco sul pulsante, mi si apre l'imputbox, scrivo 5, invio, si apre l'userform con 15 textbox (15 perchè: in una textbox scriverò un valore, nell'altra scriverò la data e nell'altra l'ora). Qualsiasi valore io scriva lo moltiplicherà per 3.

      Grazie mille in anticipo per la disponibilità e per qualsiasi aiuto..  

      Buona giornata a tutti

       

      #19980 Score: 1 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        ("Inputbox", non "imputbox")

        Il metodo per aggiungere controlli a un For è Controls.Add, cui segue come parametro il nome interno del controllo. Per un textbox devi usare il prog id "Forms.TextBox.1", segue il nome da dare al controllo per recuperarlo poi. Devi anche posizionarlo correttamente sul form.

        Questo semplicissimo (e grezzo) esempio posiziona n*3 controlli sul form distanziati da 16 pixel (più o meno la loro altezza):

        Private Sub CommandButton1_Click()
        Dim i As Integer
        Dim n As Integer
            i = InputBox("Quanti controlli vuoi creare?")
            For n = 1 To i * 3
                Controls.Add "Forms.TextBox.1", "tb" & n
                Controls("tb" & n).Move 100, (n - 1) * 18
            Next
        End Sub
        #19981 Score: 0 | Risposta

        Gret
        Partecipante

          Ciao vecchio frac,

          grazie per aver risposto 🙂

          Scusa l'ignoranza nello scrivere inputbox... gentilmente ti vorrei chiedere una cosa.

          La visualizzazione delle textbox va benissimo (grazie mille 🙂 ) ma è possibile averle tipo una accanto all'altra? Non tutte ma tipo 3 alla volta:

          txt1 txt2 txt3

          txt4 txt5 txt6

          .....ecc

          Grazie per la disponibilità..  

          #19982 Score: 0 | Risposta

          albatros54
          Moderatore
            89 pts

            https://www.excelvba.it/Forum/story/Visual_Basic_for_Applications/Creare_tante_textbox_quanti_i_valori_da_inserire.html

             

            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
            Sempre il mare, uomo libero, amerai!
            ( Charles Baudelaire )
            #19983 Score: 0 | Risposta

            Gret
            Partecipante

              Ciao Albatros54,

              grazie per l'intervento.. per caso ti ritrovi l'allegato così che lo possa studiare e capire il funzionamento del codice?

              Grazie ancora

              #19990 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                Albatros è la nostra memoria storica 🙂

                Gret ha scritto:

                è possibile averle tipo una accanto all'altra?

                Devi solo posizionarle correttamente: Move vuole una coordinata x e una y per cui puoi giocare a fare le modifiche di questo tipo:

                Controls("tb" & n).Move (n - 1) * 30, 10

                Gret ha scritto:

                per caso ti ritrovi l'allegato

                Purtroppo se Albatros non ha conservato personalmente gli allegati transitati nel vecchio forum, questi non ci sono ormai più (anche perchè venivano comunque cancellati dal sistema ogni sette giorni per motivi di spazio sul server).

                #20000 Score: 0 | Risposta

                Gret
                Partecipante

                  Buongiorno,

                  vecchio frac sei gentilissimo e ti ringrazio!

                  Solo una cosa, per poter cambiarli di posizione ci devo "giocare" nel ciclo For...Next giusto?

                  Perchè inserendo la riga che mi hai postato li mette uno accanto all'altro sì, ma tutte..mentre io vorrei che siano uno accanto all'altro ma tre alla volta:

                  txt1 txt2 txt3

                  txt4 txt5 txt6

                  ecc....

                  Mentre adesso esce in questo modo:

                  txt1 txt2 txt3 txt4 txt5 txt6 ecc..

                  Ti ringrazio dell'aiuto e della pazienza!  

                  #20002 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    Allora occorre introdurre il concetto di Step nel ciclo For.

                    Il For può essere istruito a valorizzare il suo contatore a tot passi alla volta, per cui (ragionando opportunamente sui valori da passare a Move) è possibile fare quello chiedi. Visto che ho un attimo ci penso su e poi ti riscrivo le due righe di esempio.

                    #20004 Score: 1 | Risposta

                    vecchio frac
                    Senior Moderator
                      272 pts

                      Ecco qui. Ho commentato così puoi capire meglio cosa modificare:

                      Option Explicit
                      
                      Private Sub CommandButton1_Click()
                      Dim i As Integer
                      Dim n As Integer
                      Dim m As Integer
                      Dim w As Integer
                      
                          i = InputBox("Quanti controlli vuoi creare?")
                          For n = 1 To i * 3 Step 3
                              For m = 1 To 3
                                  'agginge un extbox all'userform
                                  'ogni userform avrà nome "tb**" dove gli asterischi
                                  'vengono valorizzati con il proprio numero di ordine
                                  'per riga e per colonna
                                  Controls.Add "Forms.TextBox.1", "tb" & n & m
                                  'calcola la larghezza standard di un textbox
                                  w = Controls("tb" & n & m).Width
                                  'e lo posiziona per riga e per colonna a gruppi di tre
                                  'prova a variare i valori:
                                  '(m - 1) * w + 5    modifica il 5 per lo spazio orizzontale tra i textbox
                                  '(n - 1) * 7 + 3    modifica il 7 per lo spazio verticale tra i textbox
                                  '                   e il 3 per lo scostamento dall'alto
                                  Controls("tb" & n & m).Move (m - 1) * w + 5, (n - 1) * 7 + 3
                                  
                              Next
                          Next
                      End Sub
                      #20007 Score: 0 | Risposta

                      Gret
                      Partecipante

                        Grazie mille dell'aiuto!

                        Ora mi diverto un pò con le altezze e larghezze  

                        Buona continuazione  

                      Login Registrati
                      Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
                      Rispondi a: Creare tante textbox quanto è il valore (x3)
                      Gli allegati sono permessi solo ad utenti REGISTRATI
                      Le tue informazioni: