Funzione ARROTONDA non definita nell'espressione

di il
9 risposte

Funzione ARROTONDA non definita nell'espressione

Salve,
in STRUMENTI DATABASE/VISUAL BASIC ho creato nuovo MODULO per definire la seguente funzione:

Function Arrotonda(numero As Variant) As Variant

If numero = "" Then
Exit Function
End If

Dim valore As Currency

valore = Fix(numero * 1000)

If Right$(valore, 1) >= 5 Then
valore = valore + 10
End If

valore = Fix(valore / 10) / 100
Arrotonda = valore
End Function

ma quando la richiamo in una query Access mi segnala in pop up: Funzione 'arrotonda' non definita nell'espressione.

Come posso risolvere?

P.S.: non consigliatemi di utilizzare la funzione ROUND in quanto sbaglia gli arrotondamenti sull'euro.

9 Risposte

  • Re: Funzione ARROTONDA non definita nell'espressione

    gianphy ha scritto:


    ma quando la richiamo in una query Access mi segnala in pop up: Funzione 'arrotonda' non definita nell'espressione.
    Questo mi fa pensare che c'è un errore nella compilazione della query. Cosa hai scritto in visualizzazione struttura query, nella colonna coinvolta dalla Function "Arrotonda"?
    Oppure mostra l'SQL della query.
    Oppure ti consiglio di dichiarare esplicitamente Public Function in VBA.
  • Re: Funzione ARROTONDA non definita nell'espressione

    La funzione che hai scritto non è una gran cosa ne matematicamente, ne tecnicamente... basta provare con i numeri Negativi... oppure basta inserire una data... e pare provarci...

    Io ti suggerisco questa che funziona sempre ed effettua arrotondamento commerciale di Default alla 2° cifra.
    Function fctRound(varNr As Variant, Optional varPl As Integer = 2) As Double
     'by Konrad Marfurt + ("" by) Luke Chung + Karl Donaubauer
    
        'esce se valore non numerico
        If Not IsNumeric(varNr) Then Exit Function
    
        fctRound = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10 ^ varPl)
    
    End Function
    Sei certo di non avere problemi di RIFERIMENTI...?
    La funzione è in un modulo di una Form o in un Modulo Bas standard..?(ovviamente questa è la soluzione giusta).
  • Re: Funzione ARROTONDA non definita nell'espressione

    OsvaldoLaviosa ha scritto:


    gianphy ha scritto:


    ma quando la richiamo in una query Access mi segnala in pop up: Funzione 'arrotonda' non definita nell'espressione.
    Questo mi fa pensare che c'è un errore nella compilazione della query. Cosa hai scritto in visualizzazione struttura query, nella colonna coinvolta dalla Function "Arrotonda"?
    Oppure mostra l'SQL della query.
    Oppure ti consiglio di dichiarare esplicitamente Public Function in VBA.
    SELECT tblEnte.*, tblRegDecreti.*, qryFirstIDtblRG.NumARG, qryFirstIDtblRG.AnnoIDRG, tblAnagrafe.*, tblComuni.*, tblComuni_1.*, tblSoggetti.*, tblLiquidazioni.*, Nz([Indennizzo])+Nz([Interessi]) AS TotIndennizzo, Round((Nz([Compenso])*[AliqSpeseGen]),2) AS SpeseGenerali, CCur(arrotonda(Nz([Compenso])*[AliqSpeseGen])) AS SpGenArr, Nz([Compenso])+Nz([SpeseGenerali]) AS SubTotCompenso, [SubTotCompenso]+Nz([SpeseImp]) AS ImponibileCPAIRPEF, Round(Nz([ImponibileCPAIRPEF]*[AliqCpa]),2) AS CPA, [ImponibileCPAIRPEF]+[CPA] AS ImponibileIva, Round([ImponibileIVA]*[AliqIva],2) AS IVA, [ImponibileIVA]+[IVA]+Nz([SpeseNonImp]) AS TotFattura, [ImponibileCPAIRPEF]*[RitenutaFisc] AS RitFiscale, tblLiquidazioni.IDLiquidazione
    FROM (tblEnte INNER JOIN (qryFirstIDtblRG RIGHT JOIN tblRegDecreti ON qryFirstIDtblRG.DecretoID = tblRegDecreti.IDDecreto) ON tblEnte.IDEnte = tblRegDecreti.EnteID) INNER JOIN ((tblComuni RIGHT JOIN ((tblComuni AS tblComuni_1 RIGHT JOIN tblAnagrafe ON tblComuni_1.IDComune = tblAnagrafe.CittàNascita) INNER JOIN tblSoggetti ON tblAnagrafe.IDAnagrafica = tblSoggetti.AnagraficaID) ON tblComuni.IDComune = tblAnagrafe.Città) INNER JOIN tblLiquidazioni ON tblSoggetti.IDSoggetto = tblLiquidazioni.SoggettoID) ON tblRegDecreti.IDDecreto = tblSoggetti.DecretoID
    WHERE (((tblLiquidazioni.IDLiquidazione)=9492));

    La cosa assurda è che a casa, con WIN 10 e OFFICE 2016 mi funzionava tutto, torno in ufficio dove ho WIN 7 e OFFICE 2010 e non mi funziona più (da tenere presente che il database l'ho creato in ufficio, quindi con la versione precedente). Ora che torno a casa voglio proprio vedere se continua a funzionarmi (ho i pc sincronizzati tramite cloud).
  • Re: Funzione ARROTONDA non definita nell'espressione

    Hai un problema di riferimenti mancanti, peobabilmete hai referenziato qualche lib che non trova nell'altro pc...quasi certamente come suggerito da subito e non ascoltato... vedi tu.
  • Re: Funzione ARROTONDA non definita nell'espressione

    @Alex ha scritto:


    La funzione che hai scritto non è una gran cosa ne matematicamente, ne tecnicamente... basta provare con i numeri Negativi... oppure basta inserire una data... e pare provarci...

    Io ti suggerisco questa che funziona sempre ed effettua arrotondamento commerciale di Default alla 2° cifra.
    Function fctRound(varNr As Variant, Optional varPl As Integer = 2) As Double
     'by Konrad Marfurt + ("" by) Luke Chung + Karl Donaubauer
    
        'esce se valore non numerico
        If Not IsNumeric(varNr) Then Exit Function
    
        fctRound = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10 ^ varPl)
    
    End Function
    Sei certo di non avere problemi di RIFERIMENTI...?
    La funzione è in un modulo di una Form o in un Modulo Bas standard..?(ovviamente questa è la soluzione giusta).
    Innanzitutto ti ringrazio per aver evidenziato il limite dei numeri negativi (la qual cosa, ahimè, è alquanto rilevante).
    Proverò ad implementare la funzione da te proposta, anche se non tanto l'ho capita, ma se funziona perchè no.
    Circa la tua domanda finale, la funzione l'ho inserita da STRUMENTI DATABASE/VISUAL BASIC, qui INSERISCI NUOVO MODULO ed ho copiato le righe di codice.

    C'è da dire, come ho appena detto in risposta all'altro intervento, che la cosa strana è che a casa, con WIN 10 ed ACCESS 2016 mi funzionava, in ufficio con WIN 7 e ACCESS 2010 no. Eppure ho fatto gli stessi passaggi per introdurla.
  • Re: Funzione ARROTONDA non definita nell'espressione

    Infatti proprio in relazione alla tua ultima rinnovata informazione io ho rafforzato un suggerimento che gia ti diedi al primo intervento ma probabilmente non lo hai compreso...?

    Lo ripeto per la 3° volta i RIFERIMENTI A LIBRERIE ESTERNE.

    P.s. ti sei accorto che la tua funzione moltiplica per 1000 e divide per 1000... mentre la funzione proposta usa un 10^n dove n è il numero del decimale a cui arrotondare... nella funzione rappresentato da varPl) e tiene conto del segno... oltre che a verificare la coerenza del parametro in ingresso in modo giusto.
  • Re: Funzione ARROTONDA non definita nell'espressione

    Poichè il povero @Alex si sgola ma pare tu non riesca a capire, ti suggerisco innanzitutto di renderti conto che le funzioni scritte in Access 2016 non sempre sono compatibili con Access 2010 (e a volte, pensa un po', vice-versa).

    Inoltre ti consiglio di leggerti questo articolo così da capire ciò che @Alex sta cercando di spiegarti https://support.microsoft.com/it-it/help/310803/how-to-resolve-reference-issues-in-an-access-database
  • Re: Funzione ARROTONDA non definita nell'espressione

    Segnalo crosspost
    https://answers.microsoft.com/it-it/msoffice/forum/all/funzione-arrotonda-non-definita-nellespressione/89e6fcd4-6cac-4b08-9e15-8af32a6de2e2
  • Re: Funzione ARROTONDA non definita nell'espressione

    Gianni55 ha scritto:


    Segnalo crosspost
    https://answers.microsoft.com/it-it/msoffice/forum/all/funzione-arrotonda-non-definita-nellespressione/89e6fcd4-6cac-4b08-9e15-8af32a6de2e2
    Si ragazzi, chiedo venia, ho postato il problema un pò dovunque e mi ero concentrato sull'altro forum.
    Alla fine il problema era più sciocco di quanto sembrasse: è uscito fuori che l'errore era generato dal fatto che davo al modulo lo stesso nome della funzione!
    Sì, lo so, è un errore grossolano ma per me, che mi affaccio occasionalmente alla programmazione, non lo era affatto... Non potevo immaginare certo che mi avrebbe fatto impazzire per qualche giorno.

    Uso Access e riesco a fare cose di un certo rilievo da usare in ufficio, ma mai con righe di codice... Me ne esco sempre con qualche escamotage e, alla fine, lo avevo trovato anche qui inserendo direttamente nella query (di calcolo) la seguente espressione:
    ValoreArrotondato: Int([CampoDaArrotondare]*100+0,5)/100
    Ma ora che ho risolto preferisco utilizzare una delle funzioni proposte.
    Ringrazio di nuovo tutti e mi scuso ancora.
Devi accedere o registrarti per scrivere nel forum
9 risposte