Sviluppare funzionalita su Microsoft Office con VBA inserire dati da textbox (userform) a cella solo se valore presente

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

    FROST220684
    Partecipante

      Ciao a tutti,

      non riesco a capire come far funzionare questo codice, in pratica ho creato un userform che ha al suo interno una serie di textbox (ognuna di essa collegata ad una cella specifica di un determinato foglio. Vorrei che se scrivo qualcosa nella text box lui inserisca il dato ma se non scrivo nulla l'azione non avvenga.

      Es. la textbox1 è collegata alla cella B8 del foglio1: Se scrivo 1 mi deve scrivere 1 in B8, ma se non scrivo nulla non deve fare niente.

      ho scritto questo che effettivamente mi scrive quanto detto in b8 però non so fare l'operazione nulla:

      Option Explicit
      
      Private Sub CommandButton1_Click()
      Worksheets("Input").Range("B8").Value = TextBox1.Value
      End Sub

      So che è abbastanza semplice allego anche un'immagine dell'userform in quanto essendoci molte textbox se qualcuno ha un consiglio da dare lo ascolto volentieri

      Grazie a tutti

      Allegati:
      You must be logged in to view attached files.
      #44096 Score: 0 | Risposta

      albatros54
      Moderatore
        89 pts

        Scusa,hai messo qualche controllo sulle Texbox che impone al codice che tutte le texbox debbono essere compilate?

         

         

        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 )
        #44099 Score: 0 | Risposta

        FROST220684
        Partecipante

          albatros54 ha scritto:

          Scusa,hai messo qualche controllo sulle Texbox che impone al codice che tutte le texbox debbono essere compilate?

          no albatros nessun controllo deve solo guardare tutte le textbox e dove viene inserito qualcosa lo mette in celle dove non viene inserito nulla deve saltarla e non emettere nessuna operazione

          #44102 Score: 0 | Risposta

          FROST220684
          Partecipante

            oppure si potrebbero popolare le textbox con il contenuto delle celle ed alla loro modifica modificare il contenuto delle celle

            #44108 Score: 0 | Risposta

            FROST220684
            Partecipante

              albatros54 ha scritto:

              Scusa,hai messo qualche controllo sulle Texbox che impone al codice che tutte le texbox debbono essere compilate?

              FROST220684 ha scritto:

              oppure si potrebbero popolare le textbox con il contenuto delle celle ed alla loro modifica modificare il contenuto delle celle

              questa me la sono risolta cosi

              Private Sub UserForm_Initialize()
              
              TextBox1.Value = Sheets("Input").Range("B8").Value
              TextBox2.Value = Sheets("Input").Range("B9").Value
              TextBox3.Value = Sheets("Input").Range("B10").Value
              TextBox4.Value = Sheets("Input").Range("B11").Value
              TextBox5.Value = Sheets("Input").Range("B12").Value
              TextBox6.Value = Sheets("Input").Range("B22").Value
              TextBox65.Value = Sheets("Input").Range("D22").Value
              TextBox67.Value = Sheets("Input").Range("B23").Value
              TextBox66.Value = Sheets("Input").Range("D23").Value
              TextBox8.Value = Sheets("Input").Range("D24").Value
              TextBox9.Value = Sheets("Input").Range("D25").Value
              
              End Sub
              #44121 Score: 0 | Risposta

              FROST220684
              Partecipante

                Allora andando per gradi:

                le textbox visualizzeranno tutto quello che è presente nelle celle (a volte sono anche formule, ma la textbox chiaramente visualizzerà il testo o valore numerico) attraverso questo codice: 

                Private Sub UserForm_Initialize()
                
                TextBox1.Value = Sheets("Input").Range("B8").Value
                TextBox2.Value = Sheets("Input").Range("B9").Value
                TextBox3.Value = Sheets("Input").Range("B10").Value
                TextBox4.Value = Sheets("Input").Range("B11").Value
                TextBox5.Value = Sheets("Input").Range("B12").Value
                TextBox6.Value = Sheets("Input").Range("B22").Value
                TextBox65.Value = Sheets("Input").Range("D22").Value
                TextBox67.Value = Sheets("Input").Range("B23").Value
                TextBox66.Value = Sheets("Input").Range("D23").Value
                TextBox8.Value = Sheets("Input").Range("D24").Value
                TextBox9.Value = Sheets("Input").Range("D25").Value
                
                End Sub

                Poi tramite un tasto inserisco il testo presente nelle textbox nelle celle corrispondenti con questo codice:

                Option Explicit
                
                Private Sub CommandButton1_Click()
                Worksheets("Input").Range("B8").Value = TextBox1.Value
                End Sub

                mi manca solo il pezzo che dice all'userform:

                Se la textbox viene modificata, modifica la cella

                se la textbox non viene modificata non toccare la cella

                Si puo fare, secondo voi?

                P.S.

                Chiaramente ci sono molte textbox e nei codici postati ne ho messo solo alcune per dare l'idea, il codice completo poi lo completerò con calma io.

                #44123 Score: 0 | Risposta

                alexps81
                Moderatore
                  58 pts

                  Ma scusa il numero di textbox che devi gestire sono quelle nella userform della foto che hai allegato ad inizio del topic? Cioè sono circa una trentina? Se si perché non fai un ciclo For...Next? 4 linee di codice e fai tutto.

                  Devi rinominare le textbox a piacere tuo (un modo convenzionale sarebbe "txt") e poi un numero che equivale al numero di colonna, o rigo in base a come sono posizionate, della cella in cui deve interagire quella textbox.

                  Per esempio ipotizzando che hai 30 textbox e la prima textbox deve interagire con la cella A3, la seconda con la cella A4, la terza con la cella A5, e così via fino alla cella A33...allora sarà un qualcosa del genere:

                  Dim i As Long
                  
                  For i = 3 To 33
                      Cells(i, "A").Value = Controls("txt" & i).Value
                  Next i

                  tutte le textbox le numeri a partire dal 3 fino a 33 (txt1, txt2,txt3...txt33)

                  Se però non c'è sequenza tra le celle (ad esempio le celle sono la A3, A6, 10, A11, A12, A15, ecc...) allora il discorso cambia un po' ma nulla di impossibile. Basta definire un Array di numeri che corrispondono alle celle. Ora sono con il cellulare e non voglio sbagliare troppo a scrivere un codice che non funziona. Se indichi con esattezza le celle da passare in rassegna allora si scrive il codice giusto.

                  #44125 Score: 0 | Risposta

                  FROST220684
                  Partecipante

                    Ciao Alex,

                    Allora si, la foto è quella se poi noti c'è un'altra pagina che si riferisce ad un altro foglio in cui ci sono altre textbox.

                    Allora io purtroppo con i cicli for...next non me la cavo proprio nel senso che non li so usare ma con le dovute spiegazioni iniziali dovrei essere in grado di aiutare e completare il codice.

                    alexps81 ha scritto:

                    Se però non c'è sequenza tra le celle (ad esempio le celle sono la A3, A6, 10, A11, A12, A15, ecc...) allora il discorso cambia un po' ma nulla di impossibile. Basta definire un Array di numeri che corrispondono alle celle. Ora sono con il cellulare e non voglio sbagliare troppo a scrivere un codice che non funziona. Se indichi con esattezza le celle da passare in rassegna allora si scrive il codice giusto.

                    Effettivamente le celle non sono tutte consequenziali quindi penso che si debba passare alla seconda ipotesi dell'Array che non conosco nemmeno   

                    Allora facciamo cosi se per te va bene, innanzitutto non c'è fretta. Ti metto apposto un po tutto quello che riesco e ti mando un file di prova dove vanno aggiunte queste cose se per te va bene.

                    Altra cosa quando effettuo delle modifiche con questo form, successivamente stampo sempre un pdf e vorrei che quelle celle che ho modificato ritornino allo stato iniziale (stato iniziale che potrebbe essere anche una formula), ho gia provato un codice ma mi va in debug che è questo:

                     .Range("D22") = "=SOMMA.SE('NON TOCCARE'!A2:A120;" >= "&Input!B6;'NON TOCCARE'!C2:C120)-SOMMA.SE('NON TOCCARE'!A2:A120;" >= "&Input!B7;'NON TOCCARE'!C2:C120)"

                    cosa sbaglio?

                    Grazie mille alex

                    #44126 Score: 0 | Risposta

                    alexps81
                    Moderatore
                      58 pts

                      Dovrebbe essere qualcosa di simile:

                      Dim x As Variant, i As Integer
                      
                      x = Array(3, 5, 6, 7, 10, 11, 13, 16, 18, 20)
                      For i = LBound(x) To UBound(x)
                          Cells(x(i), "A").Value = Controls("txt" & x(i)).Value
                      Next i

                      Ripeto sono con il cellulare e spero di non sbagliare. In pratica nell'Array x definisci il numero delle celle da processare (in questo esempio sarebbero le celle A3, A5, A6, A7, A10, A11, A13, A16, A18, A20).

                      Si fa partire un ciclo For che parte dalla parte bassa dell'insieme x (LBound(x) = 3) fino alla parte terminale dell'insieme x (UBound(x) = 20).

                      Le textbox le rinomini txt3, txt5, txt6...txt20

                      #44127 Score: 0 | Risposta

                      FROST220684
                      Partecipante

                        ok provo a fare qualcosa,

                        domanda ma questo codice come si accorge se io ho modificato qualcosa?

                        #44130 Score: 0 | Risposta

                        alexps81
                        Moderatore
                          58 pts

                          Lo devi inserire nell'evento click di CommandButton ad esempio...cioè quando fai click sul pulsante che vuoi che inserisce i dati.

                          Ma puoi fare la stessa cosa per popolare le textbox. Sull'evento Initialize della form devi invertire Cells(x(i), "A").Value con Controls("txt" & x(i)).Value

                          #44131 Score: 0 | Risposta

                          FROST220684
                          Partecipante
                            Dim x As Variant, i As Integer
                            
                            x = Array(3, 5, 6, 7, 10, 11, 13, 16, 18, 20)
                            For i = LBound(x) To UBound(x)
                                Cells(x(i), "A").Value = Controls("txt" & x(i)).Value
                            Next i

                            capito quello che hai spiegato ma dopo next i, cosa c'è?

                            #44135 Score: 0 | Risposta

                            alexps81
                            Moderatore
                              58 pts

                              Non lo so...io ti ho solo fatto un esempio di un codice (che mi auguro abbia scritto bene) che scrive il contenuto delle txt3, txt5, txt6...txt20 nelle celle A3, A5, A6...A20

                              Quello che c'è dopo devi saperlo tu. Io non so quali altre istruzioni vuoi dare.

                              Se vuoi che salva il file allora ci vuole altro codice dopo; se vuoi che svuoto le textbox allora ce ne vuole altro; ecc...

                              #44138 Score: 0 | Risposta

                              FROST220684
                              Partecipante

                                Allora ho provato ma non sono riuscito ad impostarlo, ho provato a buttare giu un codice semplice che fa alcune cose:

                                1. all'apertura dell'userform2 con il tasto modifica fogli mi popola tutte le textbox con quello che c'è nelle cella

                                2. premendo sul tasto "inserisci modifiche nel foglio input" lui inserisce tutte le textbox nelle varie celle:

                                Problemi con il punto 2:

                                1. Non voglio che mi inserisca tutte le textbox ma solo quelle che modifico

                                2. con questo codice se il campo inizialmente è vuoto ed io comunque non lo modifico lui mi azzera la cella cancellando anche le formule al suo interno

                                --------------------------------------

                                Cosa vorrei:

                                1. A me va bene vedere tramite le textbox cosa c'è nelle celle ma nella fase di modifica vorrei che modificasse solo quello dove io metto mano e non tutte le textbox indistintamente come fa adesso.

                                Poi vorrei creare un tasto che in caso di errore/emergenza mi ripristini tutte le formule presenti nel foglio ed avevo provato alcune cose che però mi vanno in debug tipo:

                                Range("D22").FormulaLocal = "=SOMMA.SE('NON TOCCARE'!A2:A120;">="&Input!B6;'NON TOCCARE'!C2:C120)-SOMMA.SE('NON TOCCARE'!A2:A120;">="&Input!B7;'NON TOCCARE'!C2:C120)"

                                Non so perche mi vada in errore, mi pare che il codice corretto sia questo.

                                Allego un file prova completo con tutte le mie modifiche cosi può essere d'aiuto

                                Grazie a tutti

                                Allegati:
                                You must be logged in to view attached files.
                                #44149 Score: 0 | Risposta

                                albatros54
                                Moderatore
                                  89 pts

                                  FROST220684 ha scritto:

                                  Poi vorrei creare un tasto che in caso di errore/emergenza mi ripristini tutte le formule presenti nel foglio ed avevo provato alcune cose che però mi vanno in debug tipo:

                                  puoi evitare di modificare le formule involontariamente dalla tua Userform, imponendo alle TExtbox che ricevono il valore dalle formule del foglio, inserendo questo comando , per ogni Textbox che prendono il valore dale formule, nell'esempio la Txt6 riceve il valore dalla formula.

                                  Txt6.Locked = True

                                  con questo comando non puoi modificare il valore della Tex6 della tua userform, quindi non modifichi involontariamente la formula,se ho capito

                                   

                                   

                                   

                                  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 )
                                  #44150 Score: 0 | Risposta

                                  FROST220684
                                  Partecipante

                                    no in realtà io quella txt6 come tutte le altre dove sono presenti formule potrei aver bisogno di modificarla immettendo dei valori (non soggetti a formula). Pero nello stesso tempo subito dopo ho bisogno che tutto sia ripristinato sotto formula per quello chiedevo una tasto di reset utilizzando una stringa di questo tipo:

                                    Range("D22").FormulaLocal = "=SOMMA.SE('NON TOCCARE'!A2:A120;">="&Input!B6;'NON TOCCARE'!C2:C120)-SOMMA.SE('NON TOCCARE'!A2:A120;">="&Input!B7;'NON TOCCARE'!C2:C120)"
                                    #44171 Score: 0 | Risposta

                                    albatros54
                                    Moderatore
                                      89 pts

                                      @frost220684: mi sono preso un giorno sabatico, per capire il funzionamento del tuo file.

                                      1) Vorrei sapere a cosa ti serve la userform contutte quelle TextBox, se poi non archivi in un foglio i dati che introduci, in modo da avere un database da consultare in seguito.

                                      2)Se i dati li devi introdurre nel foglio"input" perchè  non li inserisci direttamente nel foglio? cosi eviti di modificare le formule.

                                      3) La logica del tuo file è quella di aprire la userfom per inserire i dati che vanno nel foglio "input",  dati  che andranno persi al prossimo inserimento.

                                      Aspetto delucidazioni  

                                       

                                      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 )
                                      #44174 Score: 0 | Risposta

                                      FROST220684
                                      Partecipante

                                        non so se è cosi facile da spiegare,

                                        in alcuni preventivi dobbiamo andare a modificare alcune cose a mano (una cella con una formula dobbiamo modificarla in testuale/numerico), questo ci fa passare da un foglio all'altro e da una modifica all'altra. Il senso del userform è avere tutte le celle a portata di mano per effettuare le modifiche manuali da un unica finestra che gestisce foglio input e foglio output. La cosa più importante è che alla fine di queste modifiche io faccio una stampa pdf e dopo quella ho bisogno che le modifiche che ho fatto vengano resettate e quindi la cella che ho trasformato da formula a testuale/numerica deve ritornare formula.

                                        albatros54 ha scritto:

                                        1) Vorrei sapere a cosa ti serve la userform contutte quelle TextBox, se poi non archivi in un foglio i dati che introduci, in modo da avere un database da consultare in seguito.

                                        Le modifiche delle varie celle servono solo in quel dato momento il nostro database preventivi è sulla mail/google drive (come ti dicevo di queste modifiche stampo un pdf che poi mando via email al cliente)

                                        albatros54 ha scritto:

                                        2)Se i dati li devi introdurre nel foglio"input" perchè  non li inserisci direttamente nel foglio? cosi eviti di modificare le formule.

                                        Ma infatti adesso sai cosa facciamo? Modifichiamo a mano le celle che ci servono all'interno del foglio input ed output ed alla fine della stampa pdf chiudiamo il file senza salvare. Volevo cercare di semplificare ed automatizzare proprio questo passaggio

                                         

                                        Spero di averti aiutato a capire. So che non conoscendo il mio lavoro ed il file alcune cose diventano particolare e mandano in confusione. Qualsiasi aiuto anche che non risolva il problema è ben accetto.

                                        Grazie

                                        #44224 Score: 0 | Risposta

                                        alexps81
                                        Moderatore
                                          58 pts

                                          Premesso che sono d'accordo con @albatros54, in quanto non ha molto senso utilizzare una UserForm per l'inserimento di dati in celle e che poi questi dati non saranno archiviati...quindi pare evidente che lo scopo si puramente visivo.

                                          Comunque giusto per rendere l'idea di come operare...(questo ovviamente è un mio esempio, magari si potrebbe fare di meglio)

                                          si potrebbe creare un Array dove al suo interno andiamo ad immagazzinare tutte le informazioni contenute nelle celle interessate. Questo appena si inizializza la UserForm. Una volta effettuati tutti i processi (immissione di dati tramite TextBox, stampe in PDF, ecc..) si procede nel richiamare l'Array creato in precedenza e riversare il contenuto nelle varie celle.

                                          Non metto le mani io direttamente al tuo file perché ci sono un po' di cose da sistemare e l'operazione è un po' lunga...quindi lo lascio fare a te. Anche perché dovrai essere tu a scegliere quando deve avvenire il ripristino delle celle.

                                          Ti allego un piccolo esempio con cui puoi studiare i procedimenti ed adattarlo al tuo progetto.

                                          Ti do giusto delle indicazioni:

                                          Nell'evento Initialize della UserForm1 parte un ciclo For...Next che va a determinare l'Array Formule_in_Cella(1 To 5). Questo Array è dichiarato pubblicamente nel Modulo1.

                                          L'Array Formule_in_Cella prende i dati dalle celle C1, D3, E5, D8 e D10. Queste celle sono dichiarate a loro volta in un altro Array denominato x. (x = Array("C1", "D3", "E5", "D8", "D10"))

                                          Come dicevo... nel Modulo1 dichiaro un Array Public Formule_in_Celle(1 To 5) As Variant. Questo Array sarà il contenitore che conterrà le informazioni delle celle. Come vedi va da 1 To 5 perché nel mio esempio ci sono solo 5 TextBox ma tu puoi espanderlo a tutte le TextBox che ti servono.

                                          Devi avere l'accortezza però di rinominare le TextBox con un numero finale che inizia per 1, in modo sequenziale (TextBox1, TextBox2....). Questo perché verranno passate in rassegna all'interno di un ciclo For che parte da 1 fino a 5.

                                          Che cosa entra nell'array Formule_in_Celle? Entrano proprio le formule e i dati scritti nelle celle in questione. Perciò ci saranno le Formule e i dati.

                                          Quindi, una volta che inizializzi la UserForm1 si creerà questo Array che racchiuderà le informazioni dello stato iniziale delle celle. Poi attraverso le TextBox ed il button Conferma, immetterai nelle celle i nuovi dati. Infine con la Sub RipristinaFoglio (che si trova nel Modulo1), riversi i dati dell'Array Formule_in_Celle nelle varie celle.

                                          Ti ho scritto anche dei commenti nel codice per aiutarti a capire il ragionamento. Adesso tu dovresti innanzitutto rinominare tutte le TextBox, poi definire una Array x che racchiude tutti i riferimenti delle celle (e forse anche un array y visto che i tuoi fogli sono 2 [Input e Output]). Poi devi definire la grandezza dell'array Formule_in_Celle in base a quante celle dovrai processare (forse anche qui converrebbe definire 2 array visto che i fogli sono 2). Infine dovresti inserire la Sub Routine che ripristina il foglio nell'esatto punto in qui tu vuoi che sia ripristinato. Mi sembra di aver letto che vuoi che si rispristina dopo la stampa in PDF.

                                          Comunque un'alternativa a tutto questo potrebbe essere quella di immettere i dati dalle TextBox su un foglio copiato da quello originale e poi finite tutte le operazioni si elimina e si riparte da quello originale.

                                          Allegati:
                                          You must be logged in to view attached files.
                                          #44227 Score: 0 | Risposta

                                          FROST220684
                                          Partecipante

                                            Ciao Alex,

                                            ti ringrazio per l'aiuto, ci penso un po e ci studio sopra per me è una bella sfida nel senso che sono parti di vba che non conosco molto ma mi piace vedere e studiare quindi ci lavorerò un po su e chiaramente vi aggiornero. Guardo il file vedo un po come funziona e me lo studio per bene.

                                            Continuo a ringraziare tutti siete sempre gentilissimi e questo forum rimane sempre una grande risorsa.

                                            A presto

                                            #44469 Score: 0 | Risposta

                                            FROST220684
                                            Partecipante

                                              Ciao Alex, 

                                              Come promesso c'ho ragionato e studiato su, c'è pero qualcosa che non capisco e non mi fa partire l'userform (mi dice oggetto non trovato). 

                                              Ho creato come consigliato 2 array (x e y) e rinominato tutte le textbox, mi sembra di aver corretto tutto bene ma probabilmente mi sbaglio.

                                              Aggiungo che il tuo file mi sembra ottimo per quello che intendo fare, quindi la soluzione mi sembra corretta

                                              Ti allego file se riesci a farmi capire cosa sbaglio nella compilazione del codice.

                                              Trovi tutto il codice nel modulo 8 e chiaramente nell'userform. Invece la sub per avviare l'userform nel modulo 5

                                              Allegati:
                                              You must be logged in to view attached files.
                                              #44502 Score: 0 | Risposta

                                              alexps81
                                              Moderatore
                                                58 pts

                                                Farò delle prove più approfondite appena potrò...purtroppo il tempo è sempre limitato. Comunque tanto per cominciare hai sbagliato a dichiarare gli Array x ed y. Non puoi mettere un'intervallo di celle, ma celle singole.

                                                x = Array("B8", "B9", "B10", "D11", "D12", "B22", "D22", "B23", "D23", "D24:D43", "D46:D48", "D52", "D56:D58")

                                                A parte il fatto che mi sa che hai sbagliato D11 e D12 (forse è B11 e B12) ma poi non va bene D24:D43 e anche per gli altri range la stessa cosa

                                                #44518 Score: 0 | Risposta

                                                FROST220684
                                                Partecipante

                                                  alexps81 ha scritto:

                                                  x = Array("B8", "B9", "B10", "D11", "D12", "B22", "D22", "B23", "D23", "D24:D43", "D46:D48", "D52", "D56:D58")

                                                  Ecco ho sistemato ed effettivamente è partito il form   

                                                  alexps81 ha scritto:

                                                  A parte il fatto che mi sa che hai sbagliato D11 e D12 (forse è B11 e B12)

                                                  hai ragione avevo sbagliato la lettera, sistemato anche questo.

                                                  Ora l'userform parte e funziona ci sono 2 problemi che non riesco a capire:

                                                  1. Quando cambio un dato numerico nel foglio Input che in genere è formattato con metodo personalizzato valuta, lui mi inserisce un numero senza lasciare la formattazione iniziale. Ecco in realtà mi deve inserire sempre la stessa formattazione. Chiaramente cambiandola di nuovo a mano la posso aggiustare però verrebbe meno l'automatismo. Non si riesce a dire a l'userform di inserire il dato mantenendo la stessa formattazione?

                                                  2. Se clicco sul tasto "inserisci modifiche nel foglio input" tutto funziona (a parte la formattazione), se invece passo nell'altra pagina e modifico dati cliccando sul tasto "inserisci modifiche nel foglio output" non succede nulla.

                                                  3. Sarebbe utile che quando clicco sulla pagina output dell'userform excel cambi anche foglio in modo che quando faccio le modifiche posso vedere quello che succede. Per intenderci clicco su Foglio Output (Userform) viene cambiato anche il foglio in Excel, stessa cosa se ripasso al foglio input.

                                                  Tranquillo per il tempo non c'è fretta, grazie come sempre del tuo aiuto e dei consigli mi è piaciuto modificare l'Array    e capirne un po il funzionamento, certo devo migliorare

                                                  Ti riallego il file con le ultime modifiche

                                                  Allegati:
                                                  You must be logged in to view attached files.
                                                  #44535 Score: 0 | Risposta

                                                  alexps81
                                                  Moderatore
                                                    58 pts

                                                    Io però con il numero degli elementi negli Array non mi trovo. Tu hai dichiarato in Formula_in_Cella1(1 To 33) ma l'Array x deve contenere 36 elementi.

                                                    Invece in Formula_in_Celle2(1 To 28) ma nell'Array y ne dove contenere 29.

                                                    Ad ogni modo, rispetto al numero di TextBox presenti nella userform ModificaFogli, il numero dell'Array Formule_in_Celle1 dovrebbe essere (1 To 36) e non (1 To 33)

                                                    Quindi in tutte le parti del codice in cui sono coinvolti gli Array Formule_in_Celle1 e Formule_in_Celle2, è necessario dichiarare la grandezza esatta anche dei cicli i e k. Perciò anche negli eventi del Click dei Button di Conferma devi dichiararli esatti: i = (1 To 36) e k = (1 To 29). Stesso discorso nella Sub RipristinaFoglio () presente nel Modulo8. Anche qui i e k vanno da i = 1 To 36 e k = 1 To 29.

                                                    Per il discorso che nel foglio Output che non vedi modifiche...è ovvio!! Se tu dichiari un ciclo k = 1 To 29 e passi in rassegna le Textbox concatenato il numero k...nella Pagina Output della UserForm ModificaFogli, non hai la Textbox1, Textbox2...Textbox29. Ma hai Textbox 37, Textbox38, ecc...

                                                    Quindi devi modificare il ciclo facendo in modo che ad ogni iterazione, la Textbox iterata sia quella corretta. Quindi sarà qualcosa tipo:

                                                    For k = 1 To 29
                                                        If Controls("Textbox" & k + 36) <> "" Then
                                                            Worksheets("Output").Range(y(k - 1)) = Controls("Textbox" & k + 36).Value
                                                        End If
                                                    Next k

                                                    Ti giro una versione aggiornata...ho dei dubbi sul foglio Output. Vedi se sono corretti i riferimenti alle celle da modificare

                                                    Allegati:
                                                    You must be logged in to view attached files.
                                                    #44539 Score: 0 | Risposta

                                                    FROST220684
                                                    Partecipante

                                                      alexps81 ha scritto:

                                                      Ciao Alex, grazie delle correzioni

                                                      Io però con il numero degli elementi negli Array non mi trovo. Tu hai dichiarato in Formula_in_Cella1(1 To 33) ma l'Array x deve contenere 36 elementi.

                                                      Invece in Formula_in_Celle2(1 To 28) ma nell'Array y ne dove contenere 29.

                                                      Ad ogni modo, rispetto al numero di TextBox presenti nella userform ModificaFogli, il numero dell'Array Formule_in_Celle1 dovrebbe essere (1 To 36) e non (1 To 33)

                                                      Quindi in tutte le parti del codice in cui sono coinvolti gli Array Formule_in_Celle1 e Formule_in_Celle2, è necessario dichiarare la grandezza esatta anche dei cicli i e k. Perciò anche negli eventi del Click dei Button di Conferma devi dichiararli esatti: i = (1 To 36) e k = (1 To 29). Stesso discorso nella Sub RipristinaFoglio () presente nel Modulo8. Anche qui i e k vanno da i = 1 To 36 e k = 1 To 29.

                                                      eh beh non so che conti avevo fatto ma hai ragione, sono contento che almeno ho azzeccato la distinzione tra formule in celle 1 e 2 ed i cicli i e k (per me non era cosi scontato   )

                                                      alexps81 ha scritto:

                                                      Per il discorso che nel foglio Output che non vedi modifiche...è ovvio!! Se tu dichiari un ciclo k = 1 To 29 e passi in rassegna le Textbox concatenato il numero k...nella Pagina Output della UserForm ModificaFogli, non hai la Textbox1, Textbox2...Textbox29. Ma hai Textbox 37, Textbox38, ecc...

                                                      a questa cosa davvero non ci avevo proprio pensato   

                                                       

                                                      Allora il file funziona correttamente, mi faccio un po di prove su tutte le textbox in modo da guardare bene i riferimenti ma pare siano corretti ma quelli li modifico facile, però adesso riscontro 1 problema ed 1 cavolata:

                                                      1. Nel modulo 1 ho inserito la sub ripristina foglio, quindi se tu compili i campi Cliente (b1:b5) e fai partire la macro dopo aver modificato qualcosa con l'userform, lui stampa il pdf ma non ripristina il foglio come se non avesse immagazzinato l'array (nel precedente file funzionava)

                                                      2. Quando apro l'userform mi parte dalla pagina output mentre vorrei che fosse il contrario che si apra sempre dalla pagina input

                                                       

                                                      Penso che ci siamo corrette queste cose abbiamo raggiunto lo scopo. Grazie mille sei stato gentilissimo

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 29 totali)
                                                    Rispondi a: inserire dati da textbox (userform) a cella solo se valore presente
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: