Condividi tramite

Formato data in stampa unione per DataFields - Codice VBA

Anonimo
2025-01-14T16:24:05+00:00

Buongiorno.

Chiedo scusa, non sono molto pratico di Office e VBA, se scriverò qualche errore correggetemi.
Con Word 365 ed Excel 365 (base dati), entrambi stessa versione, italiana, sto cercando di gestire una stampa unione, dove, per ogni rigo di Excel, venga generato un documento e, tramite codice VBA, crei/salvi un singolo file docx per ogni documento.
In VBA, per la creazione automatica del nome del file per ogni singolo docx, sto cercando, tramite "DataFields", di leggere un campo di Excel chiamato "Test Date", campo formato/categoria data, del tipo 2012-03-14.

Qui i valori delle 4 righe Excel, per quel campo:

Test Date
2025-12-13

2025-02-20

2025-02-01

2025-01-03

Questo è il codice VBA che utilizzo per comporre i nomi dei file:

nomeFile = .DataFields("Asset").Value & "_" & Format(.DataFields("Test_Date").Value, "dd.mm.yyyy")

Questi sono i nomi dei file, come risultato:

SG1-45024353_13.12.2025.docx

SG1-00000000_20.02.2025.docx

SG1-00000000_02.01.2025.docx

SG1-45024353_01.03.2025.docx

Non capisco questo funzionamento. Sembrerebbe come se nel DataFields arrivasse comunque il campo data, in formato testuale "dd/mm/yyyy" e che per le date "01/02/2025" e "03/01/2025", essendo valide anche per il formato "mm/dd/yyyy", in quel caso le tenesse "buone" come "mm/dd/yyyy", mentre per le altre due "13/12/2025" e "20/02/2025", provasse a validarle come formato "mm/dd/yyyy", ma dando errore, provasse successivamente a considerarle nel formato "dd/mm/yyyy" e tenesse poi buone quelle.

Se non sbaglio, .DataFields("Test_Date") va a leggere direttamente da Excel e non dal valore presente sul risultato della stampa unione, in Word.

Non so cosa altro controllare.

Microsoft 365 e Office | Installare, riscattare, attivare | Altro | Altro

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

3 risposte

Ordina per: Più utili
  1. Anonimo
    2025-01-15T08:22:13+00:00

    La risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o parole insolite.

    Ciao MedicaWeb,

    Poiché c'è meno coinvolgimento con i contenuti VBA in questa community, si consiglia di pubblicare le domande correlate su Stack Overflow (solo in inglese) https://stackoverflow.com/questions/tagged/vba, dove sono presenti professionisti più esperti che possono offrirti consigli.

    Dichiarazione di non responsabilità: Microsoft non fornisce alcuna garanzia implicita o di altro tipo e non è responsabile per le informazioni ottenute da siti Web di terze parti collegati o per qualsiasi supporto tecnico relativo alla tecnologia fornita da tali siti.

    Terrò aperto questo argomento in attesa dei nostri meravigliosi volontari che possono fornire una guida.

    Migliori saluti

    Jonathan Z - MSFT | Specialista del supporto della community Microsoft

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2025-01-15T08:03:44+00:00

    Purtroppo non funziona.

    La data in Excel, che nella relativa cella appare come 2025-12-13 (nella barra della formula di Excel viene visualizzata comunque come 13/12/2025), come dateString in VBA (dateString = .DataFields("Test_Date").Value) arriva come "12/13/2025", quindi poi lo scomponimento in anno mese e giorno non funziona.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2025-01-15T04:49:23+00:00

    La risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o parole insolite.

    Ciao MedicaWeb,

    Grazie per aver visitato la community Microsoft.

    In VBA, la funzione 'Formatta' interpreta automaticamente i formati di data in base alle impostazioni locali del sistema. Tuttavia, poiché questa impostazione è spesso legata al riconoscimento della data in molte altre applicazioni, non consiglio di modificarla.

    Per assicurarsi che la data venga analizzata e riconosciuta correttamente nell'ordine 'aaaa-mm-gg' e quindi formattata come 'gg.mm.aaaa', è possibile forzare l'analisi della data suddividendo la stringa nei relativi componenti. Sostituire la seguente riga:

    nomeFile = .DataFields("Asset").Value & "_" & Format(.DataFields("Test_Date").Value, "dd.mm.yyyy")
    

    con il codice qui sotto:

    Dim dateString As String
    
    Dim yearPart As String, monthPart As String, dayPart As String
    
    Dim testDate As Date
    
    ' Ottieni il valore del campo "Test_Date" come stringa
    
    dateString = .DataFields("Test_Date").Value ' Supponiamo che dateString sia "2025-01-03"
    
    ' Dividi la stringa della data in anno, mese e giorno
    
    yearPart = Left(dateString, 4)  ' Estrai la parte dell'anno (primi 4 caratteri)
    
    monthPart = Mid(dateString, 6, 2) ' Estrai la parte del mese (dal 6° carattere, 2 caratteri)
    
    dayPart = Right(dateString, 2)   ' Estrai la parte del giorno (ultimi 2 caratteri)
    
    ' Ricombina le parti in un valore di tipo data
    
    testDate = DateSerial(CInt(yearPart), CInt(monthPart), CInt(dayPart))
    
    ' Formatta la data nel formato desiderato (dd.mm.yyyy) e crea il nome del file
    
    nomeFile = .DataFields("Asset").Value & "_" & Format(testDate, "dd.mm.yyyy")
    

    Funzionerà correttamente? Attendo con ansia il tuo feedback.

    Migliori saluti

    Jonathan Z - MSFT | Specialista del supporto della community Microsoft

    La risposta è stata utile?

    0 commenti Nessun commento