Errore macro con funzione FRAZIONE.ANNO

Anonimo
2016-10-26T15:11:18+00:00

Ciao,

Su una colonna di un foglio di lavoro Excel, utilizzo la formula in questione, che funziona senza problemi.

Occasionalmente però, da un documento Word estraggo dei dati dal foglio excel in questione attraverso una macro che apre-legge-richiude il file excel, utilizzando questo codice in word:

Dim xlApp As Excel.Application

Dim xlBook As Excel.Workbook

Set xlApp = New Excel.Application

Set xlBook = xlApp.Workbooks.Open(ThisDocument.Path & "\MIO_FILE.xls")

MIO CODICE che legge una serie di dati dal foglio Excel

xlBook.Close SaveChanges:=False

xlApp.Quit

In questo caso, se la macro word in esecuzione deve leggere i risultati della formula FRAZIONE.ANNO nel foglio excel, mi restituisce un "Errore di runtime '13' - tipo non corispondente"

ed attraverso il debug verifico che la riga che legge la cella con FAZIONE.ANNO

.Range("A" & c.Row).Value

restituisce .Range("AH" & c.Row).Value = Errore 2029

che dovrebbe essere l'errore 

xlErrName 2029 #NOME?

come se per l'appunto non riconoscesse la formula FRAZIONE.ANNO presente in quella cella.

Spero di essere stato chiaro.

Qualche aiuto?

Grazie, ciao.

Fabrizio

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

8 risposte

Ordina per: Più utili
  1. Anonimo
    2016-10-28T12:52:20+00:00

    Ciao Fabri,

    Ovviamente perchè la formula funzioni correttamente ho installato i componenti aggiuntivi

    "Strumenti di analisi" e "Strumenti di analisi - VBA"

    in Excel >>> Strumenti >>> Componenti aggiuntivi

    A me, però, le tue formule non funzionano correttamente!

    Quando apro il file che vedo:

    Si vede che, nella mia versione inglese di Excel, mentre la funzione OGGI è stato correttamente tradotto nella sua forma inglese TODAY, la seconda funzione FRAZIONE.ANNO non è stato tradotta.  

    Quindi, la versione del tuo file che hai caricato non riconosce la funzione FRAZIONE.ANNO e pare che anche il tuo codice non la riconosca. Dato che stai utilzzando Excel 2003, che non riconosce questa funzione nativemente, non posso che pensare che ci sia un problema con la tua implementazione degli Strumenti di analisi. A questo proposito ritorno al tuo commento:

    Ovviamente perchè la formula funzioni correttamente ho installato i componenti aggiuntivi

    "Strumenti di analisi" e "Strumenti di analisi - VBA"

    in Excel >>> Strumenti >>> Componenti aggiuntivi

    Ma, nell'editor VBA, hai anche creato un riferimento alla library Atpvbaen.xls ?

    Per utlizzare gli Strumenti di analisi in VBA, oltre a spuntare il componente aggiuntivo Strumenti di analisi - VBA è necessario inserire il riferimento:

    Alt +F11 | Strumenti | Riferimenti:

    Tu l'hai fatto, vero?

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-10-28T07:28:31+00:00

    Ciao,

    grazie per la tua precisa analisi.

    Ovviamente perchè la formula funzioni correttamente ho installato i componenti aggiuntivi

    "Strumenti di analisi" e "Strumenti di analisi - VBA"

    in Excel >>> Strumenti >>> Componenti aggiuntivi

    Resta il mistero che vorrei capire, di come mai la macro in Excel eseguita in autorun all'apertura del file di Excel (e quindi l'interpretazione della formule FRAZIONE.ANNO) funzioni correttamente, mentre la formula non viene riconosciuta e viene prodotto il conseguente errore se il file Excel viene aperto in background dalla macro del file  Word.

    Grazie comunque, ciao.

    Fabri

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-10-27T22:50:49+00:00

    Ciao Fabri,

    I tuoi file non riesco a testarli poiché la macro in word produce un errore:

    MANCA: Microsoft Excel 12.0 Object Library

    credo dovuta al fatto che io ho una vecchia versione di Office 2003.

    Ho caricato i files che mi producono l'errore (con i soli codici essenziali al test) su Onedrive

    https://1drv.ms/f/s!Ar9Tm6yq0fEPizvL3B5k9bt2Kshu

    Credo che il tuo problema sia dovuto al fatto  che stai utilizzando la versione Excel 2003, Quella versione non riconosce la funzone FRAZIONE.ANNO in quanto questa funzione è stata introdotta con la versione Excel 2007.  Proprio per questo motive, quando apro il tuo file, ottengo l'errore runtime13; inoltre, le formule nella colonna B del Foglio2 sono evidenziate con l'errore NOME e, guardando la barra formule, si vede che le funzione sconosciuta FRAZIONE.ANNO non è stata tradotta per la mia versione inglese. A questo proposito, vedi che la funzione OGGi () è stata correttamente tradotta come TODAY(). 

    Nel caso della versione Excel2003, la funzione FRAZIONE.ANNO era disponibile solo come parte del componente aggiuntivo Strumenti d'analisi. Nota che ci sono due ass-in : uno per per Excel ( ANALYS32.XLL) e un altro per VBA (ATPVBAIT,XLAM che, a me sarebbe ATPVBAEN.XLAM)

    Aprendo in file e Immettendo la formula nella sua forma inglese (=YEARFRAC(A2,TODAY(),1)), le formule restituiscono i valori previsti e il codice viene avviato senza problema e, quindi, fornisce i risultati della funzione MsgBox.

    In conclusione, vorrei sottolineare che io non ho né Excel 2003 o una versione italiana di Excel a mia disposizione.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-10-27T20:45:09+00:00

    Ciao

    grazie per la risposta.

    I tuoi file non riesco a testarli poiché la macro in word produce un errore:

    MANCA: Microsoft Excel 12.0 Object Library

    credo dovuta al fatto che io ho una vecchia versione di Office 2003.

    Ho caricato i files che mi producono l'errore (con i soli codici essenziali al test) su Onedrive

    https://1drv.ms/f/s!Ar9Tm6yq0fEPizvL3B5k9bt2Kshu

    Grazie, ciao.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2016-10-27T18:24:41+00:00

    Ciao Fabri,

    Su una colonna di un foglio di lavoro Excel, utilizzo la formula in questione, che funziona senza problemi.

    Occasionalmente però, da un documento Word estraggo dei dati dal foglio excel in questione attraverso una macro che apre-legge-richiude il file excel, utilizzando questo codice in word:

    Dim xlApp As Excel.Application

    Dim xlBook As Excel.Workbook

    Set xlApp = New Excel.Application

    Set xlBook = xlApp.Workbooks.Open(ThisDocument.Path & "\MIO_FILE.xls")

     

    MIO CODICE che legge una serie di dati dal foglio Excel

    xlBook.Close SaveChanges:=False

    xlApp.Quit

    In questo caso, se la macro word in esecuzione deve leggere i risultati della formula FRAZIONE.ANNO nel foglio excel, mi restituisce un "Errore di runtime '13' - tipo non corispondente"

    ed attraverso il debug verifico che la riga che legge la cella con FAZIONE.ANNO

    .Range("A" & c.Row).Value

    restituisce .Range("AH" & c.Row).Value = Errore 2029

    che dovrebbe essere l'errore 

    xlErrName 2029 #NOME?

    come se per l'appunto non riconoscesse la formula FRAZIONE.ANNO presente in quella cella.

    Spero di essere stato chiaro.

    Qualche aiuto?

    Non posso riprodurre il tuo problema!

    Inizialmente ho creato un file Excel (Fabri20161027.xlsm) e ho utilizzato il seguente codice in Excel per scrivere una formula del tipo FRAZIONE.ANNO e per leggere sia la formula che il suo valore:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim aCell As Range, bCell As Range, cCell As Range

        With ActiveSheet

            Set aCell = .Range("A2")

            Set bCell = .Range("B2")

            Set cCell = .Range("C2")

            aCell.Value = #1/10/2016#

            bCell.Value = #1/1/2015#

        End With

        With cCell

            .Formula = "=YEARFRAC(" & CLng(bCell.Value) & "," & CLng(aCell.Value) & ")"

            .Offset(0, 1).Value = Application.YearFrac(bCell.Value, aCell.Value)

            Debug.Print "C2 Formula" & .Formula _

                      & vbNewLine _

                      & "C2 Valore: " & .Value _

                      & vbNewLine _

                      & "D2 Value: " & .Offset(0, 1).Value

        End With

    End Sub

    '<<=========

    Esegendo questo codice da Excel, nella finestra Immediate ottengo i seguenti risultati:

    Il foglio si visualizza come:

    Ho poi creato un file Word, Fabri20161027,docm. Per leggere sia la formula stessa che il suo valore dal documento Word, ho inserito un modulo standard con il seguente codice:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim xlApp As Excel.Application

        Dim xlBook As Excel.Workbook

        Dim xlSH As Excel.Worksheet

        Dim xlRng As Excel.Range

        Set xlApp = New Excel.Application

        Set xlBook = xlApp.Workbooks.Open(ThisDocument.Path _

                                        & "\Fabri20161027.xlsm")

        Set xlSH = xlBook.Sheets("Foglio1")

        Set xlRng = xlSH.Range("C2")

        Call MsgBox( _

             Prompt:="Formula C2: " & xlRng.Formula _

                   & vbNewLine _

                   & "Valore C2 =" & xlRng.Value, _

             Buttons:=vbInformation, _

             Title:="REPORT")

    End Sub

    '<<=========

    Eseguendo questo codice da Word ottengo  il seguente messaggio:

    Potresti scaricare il file Excel e il file Word nel file zipato Fabri20161027.zip a:

    https://www.dropbox.com/s/6vkm5bxivg6nirr/Fabri20161027.zip?dl=0

    Se dovessi avere ancora un problema, ti chiederei gentilmente di caricare i file problematici, senza dati sensibili, e postaare un link ai file in una risposta qui.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento