Sviluppare funzionalita su Microsoft Office con VBA Inserire valore di una moltiplicazione in textbox mantenendo formattazione

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

    FROST220684
    Partecipante

      Ciao a tutti,

      Sto cercando di effettuare modifiche multiple in un foglio tramite checkbox.

      Una di queste operazioni è una moltiplicazione che viene inserita in una textbox e successivamente con un tasto nel foglio.

      Ora sono riuscito ad inserire i dati nella textbox cosi: 

      Private Sub CheckBox1_Click()
      If CheckBox1.Value = True Then
      TextBox5.Value = Range("B24").Value * 2
      TextBox6.Value = Range("D24").Value * 2
      End If
      End Sub

      ma quando poi clicco sul tasto per inserire i dati questi vengono inseriti ma la cella d24 che è formattata come valuta non mi mantiene la formattazione e diventa numero, il codice del tasto è questo e c'è proprio una sezione per mantenere la formattazione ma non capisco perche non funziona e perchè solo con quella cella:

      Private Sub btnConferma_Click()
      Dim i As Byte
      Dim x As Variant
      
      x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D44", "D51")
      
      With ThisWorkbook.Worksheets("Input")
          For i = 1 To 9
              'se textbox vuota allora lascia invariata la cella processata
              If Controls("Textbox" & i) <> "" Then
                  .Range(x(i - 1)) = Controls("Textbox" & i).Value
                  .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i)
              End If
          Next i
      End With
      
      End Sub

      allego file per prove

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

      Marius44
      Moderatore
        58 pts

        Ciao

        Al momento non sono in grado di fare prove ma ti ricordo che tutto ciò che esce da una TextBox è una STRINGA quindi prima di passarlo alla formattazione e al foglio devi convertirlo in valore. Prova a modificare la macro così e dimmi cosa viene fuori.

        With ThisWorkbook.Worksheets("Input")
            For i = 1 To 9
                'se textbox vuota allora lascia invariata la cella processata
                If Controls("Textbox" & i) <> "" Then
                    .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value)
                    .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i)
                End If
            Next i
        End With

        Cioè anteponi CDbl al contenuto della textbox

        Fai sapere. Ciao,

        Mario

         

        #44580 Score: 0 | Risposta

        FROST220684
        Partecipante

          ho capito dove sta il vero problema:

          sicuramente sul codice del bottone che probabilmente se trova un valore decimale non mantiene la formattazione valuta della cella, mentre se si inserisce un valore intero lo mantiene. Quindi il problema è solo quando si inserisce un valore con 2 decimali

          Private Sub btnConferma_Click()
          Dim i As Byte
          Dim x As Variant
          
          x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D44", "D51")
          
          With ThisWorkbook.Worksheets("Input")
              For i = 1 To 9
                  'se textbox vuota allora lascia invariata la cella processata
                  If Controls("Textbox" & i) <> "" Then
                      .Range(x(i - 1)) = Controls("Textbox" & i).Value
                      .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i)
                  End If
              Next i
          End With
          
          End Sub
          #44581 Score: 0 | Risposta

          FROST220684
          Partecipante

            funziona marius grazie mille

            #44597 Score: 0 | Risposta

            FROST220684
            Partecipante

              Ciao Marius,

              Avevo risolto ma mi si è presentato un altro problema, inserendo questo codice 

              Private Sub btnConferma_Click()
              Dim i As Byte
              Dim x As Variant
              
              x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D51", "D44", "D45")
              
              With ThisWorkbook.Worksheets("Input")
                  For i = 1 To 10
                      'se textbox vuota allora lascia invariata la cella processata
                      If Controls("Textbox" & i) <> "" Then
                          .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value)
                          .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i)
                      End If
                  Next i
              End With
              
              End Sub

              Lui mi formatta correttamente i numeri, ma se inserisco un testo in una textbox mi va in debug:

              Nel caso specifico sarebbe possibile una doppia funzione per testo e numeri (cioè se inserisco un numero me lo deve formattare come valuta, se inserisco un testo come testo)

              Grazie mille a chiunque possa dare una mano

              #44598 Score: 0 | Risposta

              Marius44
              Moderatore
                58 pts

                Ciao

                Prova mettendo la funzione If ... Else ... Then

                 

                Ciao,

                Mario

                #44599 Score: 0 | Risposta

                FROST220684
                Partecipante
                  Private Sub btnConferma_Click()
                  Dim i As Byte
                  Dim x As Variant
                  
                  x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D51", "D44", "D45")
                  
                  With ThisWorkbook.Worksheets("Input")
                      For i = 1 To 10
                          'se textbox vuota allora lascia invariata la cella processata
                          If Controls("Textbox" & i) <> "" Then
                              .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value)
                              .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i)
                         Else
                   If Controls("Textbox" & i) <> "" Then
                              .Range(x(i - 1)) = Controls("Textbox" & i).Value
                              .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i)
                  End If
                  end if
                      Next i
                  End With
                  
                  End Sub

                  ho provato cosi ma non va, penso di sbagliare qualcosa, inoltre questa possibilità si verifica solo sulla cella "d44" dell'ARRAY, quindi si potrebbe creare un'eccezione solo per quella

                  #44603 Score: 0 | Risposta

                  FROST220684
                  Partecipante

                    Ciao a tutti,

                    ho guardato un po meglio il problema, il metodo di Marius utilizzando questo codice

                    Private Sub btnConferma_Click()
                    Dim i As Byte
                    Dim x As Variant
                    
                    x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D51", "D44", "D45")
                    
                    With ThisWorkbook.Worksheets("Input")
                        For i = 1 To 10
                            'se textbox vuota allora lascia invariata la cella processata
                            If Controls("Textbox" & i) <> "" Then
                                .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value)
                                .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i)
                           Else
                     If Controls("Textbox" & i) <> "" Then
                                .Range(x(i - 1)) = Controls("Textbox" & i).Value
                                .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i)
                    End If
                    end if
                        Next i
                    End With
                    
                    End Sub

                    mi permette di mantenere tutte le formattazioni numeri

                    pero allo stesso tempo mi fa andare in debug tutte le textbox in cui inserisco del testo, ho provato a modificarlo ma niente non va.

                    Grazie a chiunque voglia aiutare, allego il file per effettuare delle prove, basta inserire cliccare sul tasto modifica fogli ed inserire del testo nelle textbox è andrà subito in debug qui:

                    .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value)
                    Allegati:
                    You must be logged in to view attached files.
                    #44607 Score: 0 | Risposta

                    Oscar
                    Partecipante
                      45 pts

                      prova cosi

                      se proprio la devi formattattare prova così che poi la formatti con quella che ti serve

                      .Range(x(i - 1)) =format( Controls("Textbox" &amp; i).Value,"0.00"

                      poi hai 2 volte la stessa condizione

                       

                       

                       

                       

                      `Private Sub btnConferma_Click()
                      Dim i As Byte
                      Dim x As Variant
                      
                      x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D51", "D44", "D45")
                      
                      With ThisWorkbook.Worksheets("Input")
                          For i = 1 To 10
                              'se textbox vuota allora lascia invariata la cella processata
                              If Controls("Textbox" & i) <> "" Then
                                  .Range(x(i - 1)) = Controls("Textbox" & i).Value
                                  
                             Else
                       If Controls("Textbox" & i) <> "" Then
                                  .Range(x(i - 1)) = Controls("Textbox" & i).Value
                                  
                      End If
                      end if
                          Next i
                      End With
                      
                      End Sub`
                      #44611 Score: 0 | Risposta

                      FROST220684
                      Partecipante

                        Oscar ha scritto:

                        prova cosi

                        Oscar ha scritto:

                        .Range(x(i - 1)) =format( Controls("Textbox" &amp; i).Value,"0.00"

                        inserendo questa dopo di questa:

                        .Range(x(i - 1)) = Controls("Textbox" & i).Value

                        mi escono errori di compilazione ma non riesco ad implementarla

                        #44612 Score: 0 | Risposta

                        Oscar
                        Partecipante
                          45 pts

                          FROST220684 ha scritto:

                          Oscar ha scritto:

                          prova cosi

                          Oscar ha scritto:

                          .Range(x(i - 1)) =format( Controls("Textbox" &amp; i).Value,"0.00"

                          inserendo questa dopo di questa:

                          .Range(x(i - 1)) = Controls("Textbox" & i).Value

                          mi escono errori di compilazione ma non riesco ad implementarla

                          Ma la formattazione per cosa ti serve , e se ti serve  quale modo devi formattare

                          Prova il File allegato

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

                          FROST220684
                          Partecipante

                            Ciao Oscar e buona domenica,

                            Allora il tuo file funziona ed era praticamente il mio codice iniziale che inserisce tutti i dati indistintamente, ma questo codice ha un problema con i decimali: cioè se io dall'userform inserisco cifre intere me le inserisce nelle celle e mantiene la formattazione valuta (€), se invece inserisco un valore decimale tipo 100,50, il dato me lo inserisce ma non mi mantiene la formattazione € valuta. Per questo con marius avevamo optato per questo codice

                            Marius44 ha scritto:

                            With ThisWorkbook.Worksheets("Input") For i = 1 To 9 'se textbox vuota allora lascia invariata la cella processata If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value) .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i) End If Next iEnd With

                            che effettivamente risolve questo problema, ma poi mi da il problema sull'inserimento di eventuale testo. Ti allego immagine per farti capire quello che faccio e cosa succede:

                            Nell'immagine ti ho evidenziato le modifiche fatte ed il risultato ottenuto

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

                            Oscar
                            Partecipante
                              45 pts

                              vedi se va bene inserisci

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

                              FROST220684
                              Partecipante

                                tecnicamente funziona ha solo un problema se si mette lo 0 prima della virgola, se riusciamo ad aggiustarlo se no va bene cosi

                                allego foto

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

                                Oscar
                                Partecipante
                                  45 pts

                                  A mè non fa così spiegami bene quando te lo fa

                                  Prova adesso

                                  è solo questione di formattazione

                                   

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

                                  Oscar
                                  Partecipante
                                    45 pts

                                    Si adesso ho capito

                                     

                                    #44630 Score: 0 | Risposta

                                    FROST220684
                                    Partecipante

                                      Eh ma è proprio quello il problema, nell'userform sono presenti textbox che fanno riferimento a numeri e textbox che fanno riferimento a testo, o ancora se vogliamo essere più precisi ti faccio un esempio (se nel campo lato mare io ho un numero, ma voglio darlo omaggio, andrò a scrivere OMAGGIO). Il problema è qui: nello stesso userform ci possono essere situazioni di inserimento dati diverse quindi non ci può essere un solo codice che formatta un solo genere di cella ma deve essere tipo dinamico:

                                      Gli dovremmo dire se inserisci un numero formattalo valuta € 1,00, se invece inserisco testo formatta come testo

                                      Spero di essermi spiegato bene e grazie mille dell'aiuto

                                      #44631 Score: 0 | Risposta

                                      FROST220684
                                      Partecipante

                                        non so se ci siamo intrecciati con i commenti   

                                        #44632 Score: 1 | Risposta

                                        Oscar
                                        Partecipante
                                          45 pts

                                          FROST220684 ha scritto:

                                          non so se ci siamo intrecciati con i commenti   

                                          Si ho capito prova l'ultima che ti ho mandato  5.0.2.1  quella prende sia i numeri che lettere

                                          ma dipende solo da come la formatti

                                          0,0.00  così prende solo numeri

                                          #,0.00 così prende numeri e lettere

                                          #44633 Score: 0 | Risposta

                                          FROST220684
                                          Partecipante

                                            sembra funzionare tutto alla perfezione.

                                            Grazie mille

                                            #44684 Score: 0 | Risposta

                                            FROST220684
                                            Partecipante

                                              Ciao Oscar,

                                              Allora ho fatto varie prove e mi sono reso conto che c'è un problema quando si va ad inserire il valore numerico.

                                              Es. Io inserisco un valore numerico nell'userform ed inserisco i dati, l'userform inserira un valore testuale del tipo (€ 1799,00), questo crea un problema nella cella D65 (cella di somma totale del preventivo) che non riconosce più quella cella come numerica essendo presente un simbolo all'interno e quindi non la somma. Ad esempio se io invece il valore lo scrivo a mano (nel testo sarà presente solo 1799, ma la cella viene formattata come valuta e quindi si somma tranquillamente faccio un video per farti vedere il problema e ti allego immagine A con spiegazione.

                                              Grazie mille

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

                                              Oscar
                                              Partecipante
                                                45 pts

                                                Non mi ero accorto che sotto avevi delle formule

                                                devi mettere  CDbl davanti

                                                che poi non capisco perchè mischi formule e macro così fai solo casino

                                                    If Controls("Textbox" & i) <> "" Then
                                                          .Range(x(i - 1)) = CDbl(Format(Controls("Textbox" & i), "€ #,0.00"))
                                                     End If
                                                Allegati:
                                                You must be logged in to view attached files.
                                                #44708 Score: 0 | Risposta

                                                FROST220684
                                                Partecipante

                                                  Oscar ha scritto:

                                                  Non mi ero accorto che sotto avevi delle formule

                                                  devi mettere  CDbl davanti

                                                  Ciao Oscar, intanto grazie per l'aiuto, purtroppo questa era una soluzione già prospettata da Marius in un post precedente e funziona solo che ti va in debug se inserisci informazioni testuali invece di numeri. Ad esempio se provi a mettere nel campo lato mare "omaggio" va in debug e non inserisce. La butto li da ignorante ma non sarebbe possibile separare le textbox dandogli dei codici diversi ad esempio per i numeri:

                                                  .Range(x(i - 1)) = CDbl(Format(Controls("Textbox" & i), "€ #,0.00"))

                                                  mentre per il testo:

                                                  un codice che non vada a creare problemi con l'inserimento di testo in generale

                                                  Se riusciamo con questa casistica basterebbe un esempio di codice poi le textbox me le divido io senza rubarti tempo.

                                                   

                                                  Oscar ha scritto:

                                                  che poi non capisco perchè mischi formule e macro così fai solo casino

                                                  lo so che è più complicato ma nel mio lavoro ci sono molte casistiche alcune da gestire in modo particolare e quindi sto implementando queste casistiche che prima si facevano a mano in modo da farle in modo automatico.

                                                  Per me puoi lavorare anche solo su questo codice prendendo in considerazione solo le textbox nell'immagine A allegata:

                                                  Private Sub btnConferma_Click()
                                                  Dim i As Byte
                                                  Dim x As Variant
                                                  
                                                  x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D51", "D44", "D45", "B14")
                                                  
                                                  'With ThisWorkbook.Worksheets("Input")
                                                    '  For i = 1 To 11
                                                          'se textbox vuota allora lascia invariata la cella processata
                                                        '  If Controls("Textbox" & i) <> "" Then
                                                            '  .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value)
                                                            '  .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i)
                                                         ' End If
                                                    '  Next i
                                                  'End With
                                                  With ThisWorkbook.Worksheets("Input")
                                                      For i = 1 To 11
                                                      
                                                      If Controls("Textbox" & i) <> "" Then
                                                            .Range(x(i - 1)) = CDbl(Format(Controls("Textbox" & i), "€ #,0.00"))
                                                            End If
                                                  Next i
                                                  End With
                                                  
                                                  End Sub

                                                  Ti mando un file aggiornato e grazie ancora dell'aiuto

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

                                                  Oscar
                                                  Partecipante
                                                    45 pts

                                                    L'unica soluzione che ho trovato per ora è gestire l'errore

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

                                                    FROST220684
                                                    Partecipante

                                                      Grazie mille, Oscar.

                                                      Effettivamente l'errore si risolve ma salta completamente la cella della somma, una bella rogna mannaggia.

                                                      Grazie mille comunque dell'aiuto. Aspetto tue se ti viene qualche idea. Grazie

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 31 totali)
                                                    Rispondi a: Inserire valore di una moltiplicazione in textbox mantenendo formattazione
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: