Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 2 su 2

Totale giornaliero in una textbox

  1. #1
    direl2007 non è in linea Novello
    Un saluto a tutti, ho la necessità su di un form di fare una somma totale in una textbox (textbox4) per ogni record inserito nel giorno (textbox2), e una somma totale in un altra textbox (textbox5) per ogni record inserito da inizio di ogni mese( textbox2).
    ho provato a scrivere qualcosa ma mi rendo conto che mi manca il legame alla data, avrei bisogno di uno spunto per far fare la somma legata alla data di inserimento di ogni record, qui di seguito il codice.

    
    'Pulsante che inserisce i nuovi dati dalle TextBox alla prima riga
    'vuota del foglio Registro
    Private Sub cmdInserisci_Click()
        'Dichiaro le variabili
        Dim lRisposta As Long
        Dim lTuttiDati As Long
        Dim lControllo As Long
        Dim dbl As Double
        Dim x As Integer
        Dim ris As Integer
        Dim regalo As Range
        
     '   ris = 0 + TextBox2.Value
        'Controllo che non vi sia già un codice identico
        lControllo = Evaluate("=COUNTIF(A2:A" & lriga & ",""=" & Me.TextBox1.Text & """)")
        'Se il codice è già presente, esco dalla Sub
        If lControllo > 0 Then
            MsgBox "Operazione annullata, Codice già presente", _
                vbOKOnly + vbCritical, _
                "Inserimento dati"
                Exit Sub
        End If
        
        'Controllo che non vi siano TextBox senza dati e nel caso avverto l'utente e
        'chiedo cosa vuole fare. Per fare ciò utilizzo la funzione fControlloDati,
        'scritta a tal proposito
        If fControlloDati Then
            lTuttiDati = MsgBox("Non tutte le TextBox contengoni dati. Proseguire?", _
                vbYesNo + vbQuestion, _
                "Inserimento dati")
            If lTuttiDati = vbNo Then Exit Sub
        End If
        'Chiedo all'utente vuole proseguire e inserire i dati
        lRisposta = MsgBox("Inserire i nuovi dati?", _
            vbYesNo + vbQuestion, _
            "Inserimento dati")
            'Se la risposta è positiva
        If lRisposta = vbYes Then
            With sh
                'On Error Resume Next mi consente di proseguire anche se viene sollevata un'eccezione
                '(errore)
                On Error Resume Next
                'Converto la stringa della TextBox2 in un valore di tipo Double. Nel caso non sia possibile
                '(ad esempio l'utente ha inserito del testo nella TextBox), viene sollevata un'eccezione, ma
                'il programma continua alla riga successiva grazie all'istruzione On Error Resume Next
                dbl = CDbl(Me.TextBox2.Text)
                'Controllo se è stata sollevata l'eccezione. In questo caso Err.Number sarà diverso da 0.
                If Err.Number <> 0 Then
                    'Se la TextBox2 non contiene nulla
                    If Me.TextBox2.Text = "" Then
                        'Passo alla variabile dbl il valore 0. Questo perchè voglio che comunque ci sia 0
                        'nella cella di colonna B anche se l'utente non inserisce nulla.
                        dbl = 0
                    'Nel caso la TextBox2 non contenga un valore numerico
                    Else
                        'Avviso l'utente che annullo l'oerazione di inserimento
                        MsgBox "Operazione annullata, i dati inseriti in IMPORTO devono essere numerici", _
                        vbOKOnly + vbCritical, _
                        "Inserimento dati"
                        'Esco dalla Sub
                        Exit Sub
                    End If
                End If
                'Controllo che la TextBox 3 contenga un dato di tipo data. Attenzione, non controllo *il formato*
                'della data inserita, ma solo che sia un valore che può essere una data: anche 1 è una data valida.
                'Formato e data effettivamente inserita esulano dallo scopo di questo esempio.
                If Not IsDate(Me.TextBox3.Text) Then
                    'Se non è una data valida avverto l'utente
                    MsgBox "Operazione annullata, in DATA deve essere inserita una data", _
                        vbOKOnly + vbCritical, _
                        "Inserimento dati"
                        'Esco dalla Sub
                        Exit Sub
                End If
                'Se tutti i dati sono validi(leggere bene i commenti qui sopra), aumento di un valore
                'il riferimento all'ultima riga con dati del foglio Registro, in modo da scrivere nella prima
                'riga vuota
                lriga = lriga + 1
                'Inserisco i dati nel foglio Registro
                .Range("A" & lriga).Value = Me.TextBox1.Text
                .Range("B" & lriga).Value = dbl
                'Qui devo convertire il testo della TextBox3 in tipo Date, altrimenti posso ottenere
                'date diverse da quelle che mi aspetto
                .Range("C" & lriga).Value = CDate(Me.TextBox3.Text)
                .Range("D" & lriga).Value = Me.ComboBox1.Text
               ' .Range("D" & lriga).Value = Me.TextBox4.Text
                '.Range("E" & lriga).Value = Me.TextBox5.Text
                .Range("E" & lriga).Value = Me.ComboBox2.Text
                If OptionButton1.Value = True Then
                  .Range("F" & lriga).Value = "PAGATA"
                  Else
                  .Range("F" & lriga).Value = "NON PAGATA"
                  End If
                  
               ' .Range("F" & lriga).Value = Me.TextBox6.Text
                .Range("G" & lriga).Value = Me.TextBox7.Text
                .Range("H" & lriga).Value = Me.TextBox8.Text
                .Range("I" & lriga).Value = Me.TextBox9.Text
                .Range("J" & lriga).Value = Me.TextBox10.Text
            End With
            'Richiamo la Sub per ricaricare la ListBox1
            TextBox4.Value = [Giornaliero]
            [Giornaliero] = [Giornaliero] + TextBox2.Value
            Call mCaricaListBox
            Application.Wait (Now + TimeValue("0:00:01"))
         ''   For x = 0 To ListBox1.ListCount - 1
        ''    ris = ris + TextBox2.Value 'ListBox1.Column(2, x)
            
            'TextBox4.Value = Format(ris, "#,###.00")
         ''   Next x
        ''    For Each x In regalo
        ''    If ris.Value = .ListBox1.Text Then
        ''    TextBox4.Text = Format(x.Offset(0, 2).Value, "#,###.00")
        ''    TextBox4.Text = TextBox4.Value + ris.Offset(0, 2).Value
        ''    End If
        ''    Next x
            
            'Avverto l'utente che l'operazione è conclusa
            MsgBox "Operazione completata, dati inseriti", _
                 vbOKOnly + vbInformation, _
                 "Inserimento dati"
            'aumento di un valore il numero contenuto nella cella B1 del foglio Dati
             [NumeroProgressivo] = [NumeroProgressivo] + 1
             
        End If
    End Sub
    
    Il campo giornaliero (cella B2) inserito in un foglio ("Dati") ovviamente continua ad incrementare il dato anche se non correttamente, e quindi andrà gestito meglio questo passaggio, legandolo alla data di inserimento per far fare il giusto totale.
    grazie ancora per l'attenzione.
    a presto

  2. #2
    direl2007 non è in linea Novello
    Un buongiorno a tutti, visto che ad oggi non ho ricevuto nessun commento a riguardo, e questo devo dire che mi è stato di stimolo per cercare la soluzione al mio problema, volevo dirvi che sbattendoci la testa sono arrivato alla soluzione e credo sia corretto comunicarla alla comunità così che possa servire ad altri trovandosi in una situazione simile.
    in buona sostanza ho aggiunto due righe di codice che di seguito elenco:


    Private Sub TextBox2_AfterUpdate()
    Dim tex As Integer
    Dim tex2 As Integer
    If OptionButton1.Value = True Then

    tex = [SommaOdierna]

    TextBox4 = Format(tex, "* #,#00.00")

    Else

    Exit Sub

    End If

    End Sub
    In aggiunta al codice riportato precedentemente ho aggiunto la seguente riga:


    If OptionButton1.Value = True Then
    .Range("F" & lriga).Value = "PAGATA"
    Call TextBox2_AfterUpdate ' Questa è la riga che ho aggiunto
    Else
    .Range("F" & lriga).Value = "NON PAGATA"
    End If
    Non mi resta che salutarvi ed a risentirci alla prossima

    p.s. ho dimenticato di spiegare cosa significa [SommaOdierna], si tratta di una cella del foglio Dati dove ho inserito la seguente formula;
    =SOMMA.PIÙ.SE(Registro!$B:$B;Registro!$C:$C;$B$3;R egistro!$F:$F;"PAGATA"), dove nella cella B3 sempre del foglio dati ci sarà la data odierna(=oggi) da confrontare con il foglio Registro per poter poi effettuare la somma del giorno.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Somma due textbox totale terza textbox
    Da freddy60 nel forum Visual Basic .Net
    Risposte: 2
    Ultimo Post: 20-06-2020, 16:21
  2. Progressivo giornaliero
    Da druido83 nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 01-09-2015, 22:20
  3. Incremento giornaliero.
    Da dama1948 nel forum Microsoft Excel
    Risposte: 18
    Ultimo Post: 29-12-2014, 18:01
  4. valorizzare textbox con totale
    Da senzavento nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 05-04-2013, 17:12
  5. Risposte: 2
    Ultimo Post: 15-10-2009, 19:33