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

    Frasubb
    Partecipante
      1 pt

      Ciao a tutti,

      avrei la necessità di formattare la textbox chiamata "TxtDebOrig", facendo sì che mentre scrivo l'importo dentro di essa, si compili automaticamente nel formato "XX.XXX,XX"

      Grazie mille in anticipo a chi vorrà aiutarmi

      #54279 Score: 0 | Risposta

      alexps81
      Moderatore
        56 pts

        Questa è una procedura che utilizzo spesso in questi casi:

        in un Modulo Standard ci metti questo

        Sub valuta_in_TextBox(ByVal TB As MSForms.TextBox)
            Dim testo As String
            Dim valore As Double
            
            Static blLock As Boolean
            
            On Error GoTo safetyExit
            If blLock Then Exit Sub
            
            testo = Trim(Replace(Replace(TB.Text, ",", ""), ".", ""))
            If testo = "" Then Exit Sub
            
            valore = CDbl(testo) / 100
            
            blLock = True
            TB.Text = Format(valore, "#,##0.00")
            TB.SelStart = Len(TB.Text)
            
        safetyExit:
            blLock = False
        End Sub
        

        poi all'evento Change della TextBox che ti interessa ci scrivi questo (esempio per la TextBox TxtDebOrig)

        Private Sub TxtDebOrig_Change()
            valuta_in_TextBox TxtDebOrig
        End Sub
        

        Ma puoi adottare lo stesso metodo ad altre TextBox identiche.

        Volendo darti una spiegazione...all'evento Change della TxtDebOrig, viene richiamata ogni volta la Sub valuta_in_TextBox che accetta come parametro proprio la TxtDebOrig. Se hai bisogno di altre spiegazioni sul comportamento della Sub valuta_in_TextBox chiedi pure.

        #54280 Score: 0 | Risposta

        LukeReds
        Partecipante
          15 pts

          ciao

          altra soluzione, va cambiato il nome Textbox1

          `Private Sub TextBox1_Change()
          Dim num As String, k As Integer, i As Integer, txtb As String
          If InStr(Textbox1, ",") > 0 Then Exit Sub
          If Not IsNumeric(Textbox1) Then
             Textbox1 = "":   Exit Sub
          End If
          num = "": k = 0: txtb = Replace(Textbox1, ".", "")
          If Len(txtb) > 3 Then
             For i = Len(txtb) To 1 Step -1
                k = k + 1:   num = Mid(txtb, i, 1) & num
                If k Mod 3 = 0 And i > 1 Then num = "." & num
             Next i
          End If
          If num <> "" Then Textbox1 = num
          End Sub`

           

          #54281 Score: 0 | Risposta

          Frasubb
          Partecipante
            1 pt

            Ciao @alexps81 e ovviamente grazie del tuo suggerimento.

            Funziona tutto bene nella textbox, però queste modifiche da te suggerite mi hanno inibito il buon funzionamento del tasto TAB, cioè se lo spingo non mi consente di passare alla successiva textbox presente nella userform, bensì mi aggiunge delle tabulazioni all'interno della textbox dove mi trovo in quel momento. Se invece la textbox in quel momento attiva è vuota, allora il TAB funziona e mi sposta regolarmente alla successiva.

            Spero di essermi spiegato. Si può risolvere ?

            Il buon funzionamento del tasto TAB è per me essenziale

            Grazie

            #54282 Score: 0 | Risposta

            Frasubb
            Partecipante
              1 pt

              Ciao @lukereds e grazie come sempre per il tuo supporto.

              Io ho inserito il tuo codice all'interno dell'evento change della textbox TxtDebOrigin, sostituito il nome della stessa a TextBox1, ma nella user non cambia niente ovvero scrivo i numeri come se non avessi apportato alcuna modifica

              #54283 Score: 0 | Risposta

              LukeReds
              Partecipante
                15 pts

                ciao,

                allego il file, vuoi ottenere quanto in immagine corretto?

                 

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

                Frasubb
                Partecipante
                  1 pt

                  @alexps81 ora sembra funzionare la formattazione dei numeri (io non ho fatto niente di diverso da prima ...), però quando vado a confermare con il tasto per trasferire i dati dalla user al foglio, mi evidenzia in giallo, quindi è un errore, questa riga di codice

                  arr(nRows, 6) = CDate(Format(TxtScadPag, "dd/mm/yy")) 'F '<-- da replicare
                  #54287 Score: 0 | Risposta

                  Frasubb
                  Partecipante
                    1 pt

                    @lukereds grazie mille ma con il codice che ho io, quando vado a trasferire i dati da user a foglio, mi da errore

                    #54288 Score: 0 | Risposta

                    LukeReds
                    Partecipante
                      15 pts

                      prova ad allegare il tuo codice che gestisce la textbox (meno righe possibili)

                      Comunque il funzionamento della sub precedente, nel mio file allegato, è quello che ti serve?

                      #54290 Score: 0 | Risposta

                      Frasubb
                      Partecipante
                        1 pt

                        @lukereds 

                        prova ad allegare il tuo codice che gestisce la textbox (meno righe possibili)

                        sono tante righe ..... non saprei quali scegliere

                        nel mio file allegato, è quello che ti serve?

                        si, sarebbe ok anche se preferirei la modalità che compila automaticamente il l'importo

                        #54291 Score: 0 | Risposta

                        Frasubb
                        Partecipante
                          1 pt

                          @alexps81 

                          Questa è una procedura che utilizzo spesso in questi casi:

                          ora funziona ma poi quando vado ad inserire i dati sul foglio, mi blocca segnalando questo errore di cui allego screen.

                          Tengo a precisare che io non ho cambiato niente per far si che si alterni il funzionamento di una cosa piuttosto che l'altra, fa tutto da solo random

                           

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

                          alexps81
                          Moderatore
                            56 pts

                            Ciao @frasubb, a me non da alcun problema di questi da te segnalati:

                            Frasubb ha scritto:

                            mi hanno inibito il buon funzionamento del tasto TAB

                            Frasubb ha scritto:

                            quando vado a confermare con il tasto per trasferire i dati dalla user al foglio, mi evidenzia in giallo, quindi è un errore, questa riga di codice

                            Frasubb ha scritto:

                            quando vado ad inserire i dati sul foglio, mi blocca segnalando questo errore di cui allego screen.

                            Prova ad allegare il file con il codice e le modifiche suggerite. Spiega bene in quale situazione riscontri problemi.

                             

                            #54296 Score: 0 | Risposta

                            LukeReds
                            Partecipante
                              15 pts

                              preferirei la modalità che compila automaticamente il l'importo

                              Cosa intendi con compilare automaticamente?

                              #54302 Score: 0 | Risposta

                              Frasubb
                              Partecipante
                                1 pt

                                Cosa intendi con compilare automaticamente?

                                che il numero si compila mentre lo scrivo. da destra a sinistra, sapendo che ci sono due decimali

                                #54303 Score: 0 | Risposta

                                Frasubb
                                Partecipante
                                  1 pt

                                  Ciao @alexps81 ora sembra funzionare il tasto TAB, ma lo faceva anche ieri e poi decideva lui quando dare errore.

                                  Evidenzio anche il fatto che il codice relativo al tasto "Inserisci" della userform, non mi calcola più esattamente (vedi file allegato)  i giorni della colonna G, che non sono altro che la differenza tra la cella V2 (che rimane fissa) e quelle dinamiche della colonna G oggetto di inserimento dati. E' fondamentale che calcoli bene, come fare per risolvere ?

                                  Grazie mille

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

                                  alexps81
                                  Moderatore
                                    56 pts

                                    Frasubb ha scritto:

                                    quando vado ad inserire i dati sul foglio, mi blocca segnalando questo errore di cui allego screen

                                    Ok questo l'ho risolto. In pratica siccome adesso le TextBox dove indichi le valute ( ad esempio la TxtDebOrigin) vengono gestite da una macro che gli applica una formattazione specifica, non è più necessaria la trasformazione con Replace dei punti e delle virgole con il Separatore dei decimali come si è fatto fin ora qui:

                                            If Not IsEmpty(arr(r, 8)) And IsNumeric(arr(r, 8)) Then
                                                Cells(r + 1, "H").NumberFormat = "#,##0.00"
                                                s = arr(r, 8)
                                                s = Replace(s, ".", Application.DecimalSeparator) '<---qui
                                                s = Replace(s, ",", Application.DecimalSeparator) '<---qui
                                                Cells(r + 1, "H").Value = CDbl(s)
                                            Else
                                                Cells(r + 1, "H").NumberFormat = "@"
                                            End If
                                    

                                    Comunque pubblicherò la soluzione non appena spieghi meglio questa situazione:

                                    Frasubb ha scritto:

                                    non mi calcola più esattamente (vedi file allegato)  i giorni della colonna G, che non sono altro che la differenza tra la cella V2 (che rimane fissa) e quelle dinamiche della colonna G oggetto di inserimento dati

                                    Dunque già in altri post ti ho chiesto come mai fai una valutazione con delle ipotetiche CheckBox (ChkSiPag e ChkSiContb) nonostante non fossero presenti nella UserForm. Hai detto che in poche parole non sono altro che un refuso di vecchie prove ma che adesso non sono più presenti.

                                    Ok ma nel codice lo sono ancora...esattamente qui:

                                        If ChkSiPag = True Then  '<---------------QUI
                                            arr(nRows, 7) = "PAGATO" 'G
                                            arr(nRows, 13) = "Si" 'M
                                        Else
                                            arr(nRows, 7) = CLng(arr(nRows, 6)) - CLng(Date)
                                            arr(nRows, 13) = "No"
                                        End If
                                    
                                    .....
                                    .....
                                    .....
                                    .....
                                    
                                        If ChkSiContab = True Then  '<---------------QUI
                                            arr(nRows, 15) = "Si" 'O
                                        Else
                                            arr(nRows, 15) = "No"
                                        End If
                                    

                                    Secondo questi due spezzoni di codice, tradotto il ragionamento è il seguente:

                                    Se la CheckBox ChkSiPag è spuntata allora in cella di colonna G scrivi "PAGATO" e contestualmente in cella di colonna M scrivi "Si" altrimenti se la ChkSiPag non risulta spuntata allora in cella di colonna G scrivi il risultato della differenza del numero di giorni che intercorre tra la data odierna e quella scritta in cella di colonna F e contestualmente in colonna M scrivi "NO"

                                    Ora non essendo presente la ChkSiPag va da sé che varrà sempre la seconda condizione (ovvero la differenza di giorni tra oggi e la data scritta in F).

                                    Chiarisci meglio questa parte perché è poco chiara. Le ChekBox non sono presenti, quindi il codice va sistemato. Quello che avevi scritto in "V2" non era altro che la data attuale ma adesso non seve più perché gestiamo tutto tramite VBA. Fammi capire in colonna "G" cosa deve realmente risultare e come dovrebbe avvenire.

                                     

                                     

                                    #54307 Score: 0 | Risposta

                                    Frasubb
                                    Partecipante
                                      1 pt

                                      Ciao @alexps81, spiego i vari passaggi:

                                      Dunque già in altri post ti ho chiesto come mai fai una valutazione con delle ipotetiche CheckBox (ChkSiPag e ChkSiContb) nonostante non fossero presenti nella UserForm. Hai detto che in poche parole non sono altro che un refuso di vecchie prove ma che adesso non sono più presenti.

                                      ho tolto dal codice le righe relative al ChkSiPag e ChkSiContab perchè, giustamente come mi ha sempre detto e fatto notare, non servono più. Ora il "PAGATO" viene gestito dal ChkPagato presente nella userform3, scrivendo "Si" in colonna M, ma il "pagato" non me lo scrive seppur abbia inserito queste righe di codice

                                      If ChkPagato = True Then  '<---------------QUI
                                              arr(nRows, 7) = "PAGATO" 'G
                                      Else
                                              arr(nRows, 7) = CLng(arr(nRows, 6)) - CLng(Date)
                                          End If

                                      Ovviamente, non mi scrive il numero di giorni che sarebbero dovuti dalla differenza di F (non la prima riga ma quella aggiuntiva) e la data di OGGI.

                                      Concludo riepilogando:

                                      1) spuntando ChkPagato da userform3, avrei bisogno di scrivere "pagato" in colonna G e contemporaneamente "Si" in colonna M.

                                      2) in colonna G, scrivere il numero di giorni dati dalla differenza della colonna F (riga aggiuntiva) e Oggi 

                                      #54308 Score: 0 | Risposta

                                      alexps81
                                      Moderatore
                                        56 pts

                                        @frasubb come al solito dobbiamo andare per gradi. Innanzitutto quel pezzo di codice che hai pubblicato dove stai cercando di metterlo? Nella UserForm3? Se così fosse...non funzionerà mai. Non ha alcuna attinenza.

                                        Allora facciamo un po' di ordine. La tua UserForm3, perdonami, ma è un disastro. Stavo cercando un modo per spiegarti i difetti ma dovrei scrivere un poema. Tra l'altro per il corretto proseguimento è necessario sistemarla.

                                        Ti allego il file modificato nella UserForm3. Inizia a vedere se funziona così come vorresti. Fai varie prove...sicuramente sarà ancora da sistemare ma per ora è un buon punto di partenza. Il codice è commentato quindi puoi capire bene il funzionamento.

                                        Ho ancora molti dubbi su come stai portando avanti questo tuo progetto. Ad esempio nella UserForm3, quando inserisci una NUOVA DATA DI SCADENZA, colori di rosso il font in colonna "F" tramite codice VBA. Onestamente non mi fa impazzire questa cosa perché quando inserisci nuovi Nominativi, poi avverrà l'ordinamento alfabetico (Bubble Sort). Il colore Rosso in colonna "F" non seguirà il nominativo ma resterà in quelle celle. Secondo me serve sfruttare la Formattazione Condizionale, che si presta meglio al caso specifico.

                                        Un'altra cosa...la TxtDaPag stabilisce quanto bisogna "pagare" in base alla divisione tra TxtAccord e TxtNumRate. Ok...va bene...ma penso che l'evento Exit da sfruttare sia su TxtNumRate e non TxtDaPag.

                                        Comunque per ora, con queste mie modifiche, quando inserisci un nuovo nominativo tramite UserForm1, in colonne "G" e "Q" non mette alcun dato in quanto non ho capito bene come vuoi procedere dato che quelle celle dipendono dalla UserForm3.

                                         

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

                                        Frasubb
                                        Partecipante
                                          1 pt

                                          Ciao @alexps81 e innanzitutto grazie !!!!

                                          Ho provato il file che mi hai mandato, però forse non mi sono spiegato chiaramente su una cosa relativamente alla colonna F, ovvero ....:

                                          1) dalla userform1, quando vado ad inserire la data di scadenza (TxtScadPag), nel foglio mi viene trasferita in colonna F sia sulla prima riga che su quella aggiuntiva, e fin qui tutto giusto.

                                          2) dalla userform3, quando eventualmente vado a digitare una nuova data di scadenza (TxtNuovaScad), questa deve essere trasferita solo nella riga aggiuntiva della colonna F, lasciando quindi inalterata quelle precedentemente inserita tramite userform1 (TxtScadPag).

                                          3) anche col tuo nuovo codice, il calcolo dei giorni riportati in colonna "G" è errato. Per rispiegare il tutto, la colonna "G" deve corrispondere alla differenza tra la data presente nella riga aggiuntiva della colonna F e "oggi" (es. data col. F 20/01/26 mentre oggi è 22/01/26 .... -----> la colonna G deve avere il risultato di "-2"

                                          #54311 Score: 0 | Risposta

                                          alexps81
                                          Moderatore
                                            56 pts

                                            Si ok...ma oltre questo a me interessa sapere se la UserForm3 adesso è corretta e poi quando compili la UserForm1 i dati in colonna G e Q quando ci vanno?

                                            Ti eri reso conto che la ComboBox in UserForm3 veniva popolata con tutti i dati presenti in colonna B? Prelevava anche i Codici Fiscali. A quel punto non andava bene nemmeno il calcolo della riga del nominativo scelto. Ecco perché è stato necessario sistemarla.

                                            Comunque, adesso fai un inserimento da UserForm1 e fai sapere cosa manca... sicuro c'è qualche intervento da fare in G e Q ma devi spiegarti bene perché solo tu sai cosa realmente vuoi ottenere.

                                            #54312 Score: 0 | Risposta

                                            Frasubb
                                            Partecipante
                                              1 pt

                                              @alexps81 la userform3 è perfetta.

                                               Indico definitivamente quello di cui avrei bisogno: 

                                              - dalla userform3 inserire la nuova scadenza nella riga aggiuntiva del foglio

                                              - in colonna G avere il calcolo dei giorni dati dalla differenza tra la data presente nella riga aggiuntiva della colonna F e "oggi"

                                              - in colonna Q inserire “No” di default in sede di dati compilati in userform1 (tasto “inserisci”), mentre inserire “Si” quando spunto la checkbox “paga” della userform3, (che automaticamente inserisce “pagato” in G)

                                              #54313 Score: 0 | Risposta

                                              alexps81
                                              Moderatore
                                                56 pts

                                                Frasubb ha scritto:

                                                la userform3 è perfetta.

                                                Ottimo. Ora su questa base sarà possibile gestire tutto il resto.

                                                Frasubb ha scritto:

                                                Indico definitivamente quello di cui avrei bisogno: 

                                                Basta semplicemente apportare le seguenti modifiche:

                                                1) In Private Sub cmdConferma_Click() della UserForm3 sostituisci così:

                                                    If TxtNuovaScad <> "" Then '<--se esiste una NUOVA DATA SCADENZA allora la trascrive in colonna "F" e la colora di rosso
                                                        Cells(rigaContatore + 1, "F").Value = CDate(TxtNuovaScad)
                                                        Cells(rigaContatore + 1, "F").Font.ColorIndex = 3 'colora il nuovo testo in ROSSO
                                                    End If
                                                

                                                2)  In Private Sub cmdInvia_Click() della UserForm1 rimuovi il commento alla riga di codice:

                                                arr(nRows, 17) = "No" 'Q

                                                3) Piccole modifiche e considerazioni: sempre in UserForm1 ho lasciato per errore ancora questa parte di codice

                                                    If ChkSiContab = True Then
                                                        arr(nRows, 15) = "Sì" 'O
                                                    Else
                                                        arr(nRows, 15) = "No"
                                                    End If
                                                

                                                cioè il "Sì" o "No" in colonna "O" in base allo stato della CheckBox ChkSiContab. Ma abbiamo detto che quella CheckBox non è più presente nella UserForm1. Quindi penso che se di default deve essere sempre "No", basta rimuovere quel pezzo di codice e lasciare semplicemente così:

                                                     arr(nRows, 15) = "No"

                                                Altra cosa...come ti ho suggerito, penso che non va bene lasciar colorare di rosso tramite VBA il font in colonna "F" quando modifichi la data di scadenza. Questo perché l'effetto sarà permanente in quella cella e quando inserirai nuovi nominativi, per l'effetto dell'ordinamento alfabetico, il colore del font non seguirà il nominativo. Ragion per cui la scelta migliore è l'applicazione della Formattazione Condizionale. Quindi ti consiglio di eliminare questa riga di codice nella UserForm3:

                                                Cells(rigaContatore + 1, "F").Font.ColorIndex = 3 'colora il nuovo testo in ROSSO

                                                Resta da capire quale logica seguire per far colorare di rosso quelle celle in colonna "F" quando modifichi la data. Osservando il funzionamento del tuo file, l'unica idea che mi è venuta in mente è quella di valutare se la cella sopra ha una data diversa da quella sotto. Se son diverse allora colora di rosso il font della cella sotto. Ovviamente la valutazione va fatta solo a coppie fisse: "F2"/"F3" - "F4"/"F5" - "F6"/"F7" - "F8"/"F9" ecc....

                                                Se il metodo è corretto allora ti propongo di selezionare l'intervallo di celle "F3:F390", poi ti porti in Formattazione Condizionale e nella barra della formula ci scrivi: =E(RESTO(RIF.RIGA();2)=1; F3<>INDICE(F:F; RIF.RIGA()-1)) ed infine scegli come colore del carattere il rosso.

                                                #54316 Score: 0 | Risposta

                                                Frasubb
                                                Partecipante
                                                  1 pt

                                                  ciao @alexps81 va tutto benissimo, solo che, come invece era prima che mi facessi tutto questo lavoro di perfezionamento dei codici, in sede di compilazione dati dalla userform1/tasto "inserisci", nella colonna G mi appariva il conteggio dei giorni che non sono altro (come anche da userform3) la differenza tra la data della riga aggiuntiva della colonna F e "oggi".

                                                  E' possibile, quindi, ripristinare tale funzionalità per favore ?

                                                  Grazie mille

                                                  #54317 Score: 0 | Risposta

                                                  alexps81
                                                  Moderatore
                                                    56 pts

                                                    Ciao @frasubb, mi sa che ora ho capito meglio quello che intendi e se quello che penso sia giusto, credo che bisogna fare un passo indietro e tronare alle Formule...almeno in colonna "G".

                                                    Da quello che ho inteso, la colonna "G" deve essere aggiornabile giorno per giorno. Cioè se in colonna "M" risulta Pagato = No, allora in "G" devi avere la differenza tra la data indicata in "F" (riga aggiuntiva) e oggi. Se invece, sempre in colonna "M" risulta Pagato = Sì, allora in colonna "G" deve apparire "PAGATO".

                                                    Questo tipo di calcolo deve essere aggiornabile ogni giorno, ecco perché una Formula è la migliore soluzione. Ti propongo questo nuovo allegato. Prova a vedere se risolviamo.

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

                                                    Frasubb
                                                    Partecipante
                                                      1 pt

                                                      Ciao alexps81, grazie mille di tutto come sempre, sei un fenomeno.

                                                      Ho però riscontrato il fatto che se dalla combo di ricerca seleziono un nominativo, tutti i suoi dati relativi non mi compaiono nella userform1 perché magari ho bisogno di apportare una modifica.

                                                      Si può risolvere ?

                                                      Allego file

                                                      Allegati:
                                                      You must be logged in to view attached files.
                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 26 totali)
                                                    Rispondi a: formattare Textbox
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: