Risolto somma valori di una colonna listview

Orset

Utente abituale
14 Dicembre 2017
103
0
0
torino
2010
Miglior risposte
0
#1
Ciao a tutti, pongo il mio problema, io ho una listview con 2 colonne, con la checkboxes attivata. La lista viene creata in modo dinamico. a me servirebbe sommare tutti i valori della seconda colonna, però solo quelli selezionati dalla checkboxes. Nella seconda colonna oltre a numeri, sono presenti anche dei simboli ("," e €) da escludere

Codice:
For Each i As ListViewItem In ListView1.CheckedItems
            idx = InStr(item.Text, "€")
            If idx > 0 Then
                stringa = item.Text
                For j = 1 To Len(stringa)
                    s = Mid(stringa, j, 1)
                    If InStr("0123456789", s) > 0 Then
                        T = T & s
                    End If
                Next j
            End If
            Totale_ = Totale_ + T
        Next
        Label6.Text = Totale_
ma nn funziona, cosa sto sbagliando?
 

Orset

Utente abituale
14 Dicembre 2017
103
0
0
torino
2010
Miglior risposte
0
#2
Ho fatto una correzione, ora mi trova i valori che mi servono, ma non li somma bene tra loro
Codice:
    While i <> ListView1.CheckedItems.Count
            stringa = ListView1.Items(i).SubItems(1).Text
            For j = 1 To Len(stringa)
                s = Mid(stringa, j, 1)
                If InStr("0123456789", s) > 0 Then
                    T = T & s
                End If
            Next j
            Totale_ = Totale_ + T
            i = i + 1
  
        End While
        Label6.Text = Totale_
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
12,788
130
63
Como
2011MAC 2016WIN
Miglior risposte
57
#3
  • ges

    ges

Ciao,
hai provato a mettere Val ai dati da sommare?

Codice:
..
s = [COLOR=#ff0000]Val([/COLOR]Mid(stringa, j, 1)[COLOR=#ff0000])[/COLOR]
..
 

giulianovac

Access Expert
Expert
9 Giugno 2018
276
30
28
Italy
Office 2013
Miglior risposte
14
#4
Ho fatto una correzione, ora mi trova i valori che mi servono, ma non li somma bene tra loro
Senza sapere QUALI dati stai sommando è impossibile capire il risultato che ti aspetti e quello che invece viene restituito.

A parte questo, la tua ruotine a me pare incomprensibile e senza senso.

Vuoi spiegare (commentare) il perché delle istruzioni che usi riga per riga?

Inoltre, dovresti fare un progetto di esempio che riproduce il problema e condividerlo.

_43_
 

Bruno

Utente abituale
13 Settembre 2015
297
7
18
Italy
2016 64 Bit W10
Miglior risposte
3
#6
Con questo codice puoi visualizzare e sommare i valori selezionati

Codice:
    Dim ListeCount, i
    ListeCount = [COLOR=#333333]ListView1[/COLOR].ListItems.Count
    Dim num
    For i = 1 To ListeCount
        If [COLOR=#333333]ListView1[/COLOR].ListItems.Item(i).Checked Then
        num = num + (Replace([COLOR=#333333]ListView1[/COLOR].ListItems.Item(i).ListSubItems(1).Text, "€", "") * 1)
            MsgBox [COLOR=#333333]ListView1[/COLOR].ListItems.Item(i).Text & vbCrLf & _
            Replace([COLOR=#333333]ListView1[/COLOR].ListItems.Item(i).ListSubItems(9).Text, "€", ""), _
            vbInformation, "INFO"
        End If
    Next i
    MsgBox "Totale: " & FormatCurrency(num), vbExclamation, "Somma"
 

Orset

Utente abituale
14 Dicembre 2017
103
0
0
torino
2010
Miglior risposte
0
#7
Ciao patel, in teoria dovrebbe venirmi corretti siccome: 04,00 escludendo la virgola, l'integer è = a 400, se io dovessi sommare 04,00€ + 0,50€ è = a dire 400+50= 450, dopo con un'istruzione rinserisco la virgola = 04,50€

Codice:
 If Len(Label5.Text) = 0 Then
            Label5.Text = "€00,00" & Label5.Text
        ElseIf Len(Label5.Text) = 1 Then
            Label5.Text = "€00,0" & Label5.Text
        ElseIf Len(Label5.Text) = 2 Then
            Label5.Text ="€00," & Label5.Text
        ElseIf Len(Label5.Text) = 3 Then
            Label5.Text = "€0" & Mid(Label5.Text, 1, 1) & "," & Mid(Label5.Text, 2, 2)
        ElseIf Len(Label5.Text) = 4 Then
            Label5.Text = "€" & Mid(Label5.Text, 1, 2) & "," & Mid(Label5.Text, 3, 2)
        ElseIf Len(Label5.Text) = 5 Then
            Label5.Text = "€" & Label5.Text
        End If
Nella label c'è il risultato
 

Orset

Utente abituale
14 Dicembre 2017
103
0
0
torino
2010
Miglior risposte
0
#8
Grazie ges, mi ero dimenticato di mettere val XD, e grazie bruno, ora lo provo a vedere, ma mi sa che risolvo con var, anche se la tua istruzione sembra migliore della mia, ora la provo
 

Orset

Utente abituale
14 Dicembre 2017
103
0
0
torino
2010
Miglior risposte
0
#10
Perché dalla lista prendo i valori e faccio la somma che stampo sulla label, ovviamente a me non serve visualizzare 400, ma 04,00&#8364;, nella label ce il risultato finale, ma la label non centra niente con la richiesta fatta da me nel post, l'ho postata solo per rispondere alla domanda di patel nel quale mi chiedeva come facessi a far tornare giusti i calcoli non tenendo conto della ",", e poi l'ho postato anche perché può essere utile per molte persone, siccome se si progetta software che programmano certe elettroniche, molte di essere non ragionano come 4&#8364;, ma come 400 cent
 

Orset

Utente abituale
14 Dicembre 2017
103
0
0
torino
2010
Miglior risposte
0
#12
fatto risolto, con qualche piccola modifica al codice di bruno:

Codice:
 Dim ListeCount, i
        ListeCount = ListView1.Items.Count
        Dim num = 0
        Try
            For i = 0 To ListeCount
                If ListView1.Items.Item(i).Checked Then
                    num = num + (Replace(ListView1.Items(i).SubItems(1).Text, "&#8364;", "") * 100)
                End If
            Next i
        Catch ex As Exception
        End Try
unica cosa, devo mettere il for in un try,siccome mi da errore dopo: invalid argument = valore di "(numero di righe selezionate)" non valide per index, come mai?
cosa può essere?
 

dracoscrigno

CioccaPiatti & VBA Expert
Expert
1 Maggio 2016
3,247
37
48
ferrara
office pro 2010
Miglior risposte
10
#14
Bruno, può essere che al post di Listview1.ListItem, tu volessi scrivere Listview1.Items ?
probabilmente pensa che tu stia parlando di VBA e non di VB net...

Al posto di utilizzare questo metodo stranissimo di estrapolare da una stringa dei numeri, perché non utilizzi le espressioni regolari che sono la cosa più opportuna ed in Vb.net sono anche ben supportate.
un esempio:

un form con dentro una textbox ed una label.

il listato nel modulo del form:

Codice:
[B][COLOR=#0000CD]Imports[/COLOR] System.Text.RegularExpressions

[COLOR=#0000cd]Public Class[/COLOR] Form1
    [COLOR=#0000cd]Private Sub[/COLOR] TextBox1_KeyUp(sender [COLOR=#0000cd]As [/COLOR][COLOR=#008000]Object[/COLOR], e [COLOR=#0000cd]As[/COLOR] [COLOR=#008000]KeyEventArgs[/COLOR]) [COLOR=#0000cd]Handles[/COLOR] TextBox1.KeyUp
        Label1.Text = [COLOR=#0000cd]New[/COLOR] [COLOR=#008000]Regex[/COLOR]([COLOR=#ff8c00]"\d+(,\d+)*"[/COLOR]).Match(TextBox1.Text).ToString
    [COLOR=#0000cd]End Sub[/COLOR]
[COLOR=#0000cd]End Class[/COLOR][/B]
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!