Tipo di variabile per valuta

Anonimo
2012-05-16T19:22:35+00:00

Quale tipo di variabile utilizzare per valuta in euro (- o +) ?

Io ho messo Long (Dim x As Long) ma mi restituisce errore "Tipo non corrispondente", se cancello la dichiarazione della variabile, la macro funziona, quindi deduco che l'errore sia proprio quello.

Grazie e una buona serata a tutti.

Ciao Antonio

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-05-17T10:12:20+00:00

Ciao Antonio,

va in errore quando le celle origine sono vuote. Il valore "vuoto" non è accettato da una variabile dichiarata Currency (che si aspetta un valore numerico) mentre è accettato quando non dichiari le variabili in quanto implicitamente VBA le considera Variant e quindi in grado di accettare anche valori Null e Stringa Vuota.

Cambia le seguenti due righe in questo modo:


xPrelievi = Val(Sheets("Archivio").Cells(i, 9).Value)


xEntrate = Val(Sheets("Archivio").Cells(i, 7).Value)


David

La risposta è stata utile?

0 commenti Nessun commento

10 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-05-16T20:40:55+00:00

    Si hai ragione, ma mi viene difficile spiegare il tutto, ci provo.

    Posto la macro che utilizzo:

    Sub SommaEntrate()

    Dim xUltimaRiga As Byte

    Dim xMese As Byte

    Dim xCategoria As String

    Dim xEntrate As Currency

    xUltimaRiga = Sheets("Archivio").Cells(Rows.Count, 1).End(xlUp).Row

    Sheets("Statistiche").Range("F2:F13").ClearContents

    For y = 2 To 13

    For i = 2 To xUltimaRiga

    xMese = Month(Sheets("Archivio").Cells(i, 1))

    xCategoria = Sheets("Archivio").Cells(i, 3)

    xEntrate = Sheets("Archivio").Cells(i, 7).Value

    If xMese = Sheets("Statistiche").Cells(y, 1) And xCategoria = Sheets("Statistiche").Cells(1, 6) Then

    Sheets("Statistiche").Cells(y, 6).Value = Sheets("Statistiche").Cells(y, 6).Value + xEntrate

    End If

    Next i

    Next y

    End Sub

    Provo a sintetizzare quello che dovrebbe fare ...

    Al Foglio "Archivio" ho:

    Colonna A Date

    Colonna C Categorie

    Colonna F Importi (voci entrate, quelle uscita le ho messe in altra colonna)

    Al Foglio "Statistiche" ho:

    A2:A13 numero mesi da 1 a 12

    Range C1:L1 categorie (quella che interessa nello specifico è F1, quindi "Cells(1, 6)")

    Range F2:F13 dovrebbe restituiri il totale per mese e categoria (F1)

    Spero si capisca, grazie ancora della disponibilità.

    Ciao Antonio

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-05-16T20:32:06+00:00

    Ciao Mauro, ho provato sia con double che con currency, ma restituisce sempre errore; probabile sbaglio qualcos'altro, ma la cosa strana che se disabilito la dichiarazione della variabile, allora la macro funziona.

    Grazie della risposta e una buona notte.

    Ciao Antonio

     

    Posta la macro o quello che vuoi fare (tutto quello che vuoi fare). Il mio codice, funziona. Il tuo non posso sapere cosa ha che non va se non lo vedo... ;-)

    Grazie e 'notte anche a te.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-05-16T20:24:05+00:00

    Ciao Mauro, ho provato sia con double che con currency, ma restituisce sempre errore; probabile sbaglio qualcos'altro, ma la cosa strana che se disabilito la dichiarazione della variabile, allora la macro funziona.

    Grazie della risposta e una buona notte.

    Ciao Antonio

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2012-05-16T20:01:53+00:00

    Quale tipo di variabile utilizzare per valuta in euro (- o +) ?

    Io ho messo Long (Dim x As Long) ma mi restituisce errore "Tipo non corrispondente", se cancello la dichiarazione della variabile, la macro funziona, quindi deduco che l'errore sia proprio quello.

    Grazie e una buona serata a tutti.

     

    Ciao Antonio

    Non è chiaro queello che chiedi. Long non ha decimali. Devi utilizzare Currency o Double (vedi la guida del vb di Excel per le differenze fra i due tipi) e questo esempio:

    Public Sub m()

        Dim mioValore1 As Currency

        Dim mioValore2 As Double

        mioValore1 = -12345.98

        mioValore2 = 12345.98

        MsgBox Format(mioValore1, " € #,##0.00") & _

            vbNewLine & Format(mioValore2, "€ #,##0.00")

    End Sub

    Entrambi supportano numeri negativi.

    Se devi copiare le variabili nel foglio:

    Public Sub m()

        Dim mioValore1 As Currency

        Dim mioValore2 As Double

        mioValore1 = 12345.98

        mioValore2 = -12345.98

        ActiveSheet.Range("A1").Value = mioValore1

        ActiveSheet.Range("A1").NumberFormat = "$ #,##0.00"

        ActiveSheet.Range("A2").Value = mioValore2

        ActiveSheet.Range("A2").NumberFormat = "#,##0.00"

    End Sub

    Ho utilizzato due formattazioni differenti per le celle e ho invertito i numeri positivi e negativi a solo scopo dimostrativo.

    La risposta è stata utile?

    0 commenti Nessun commento