Risolto Export query campi incrociati

gigi anca

Utente junior
Original poster
17 Giugno 2020
27
0
1
Access 2019
Ciao a Tutti, ho una query con campi incrociati

SQL:
TRANSFORM Last([COGNOME] & " " & [NOME] & " " & [LIBRETTO] & " " & [MORTE]) AS Espr1
SELECT griglia.FILA
FROM griglia
WHERE (((griglia.Loc) Between 1 And 9))
GROUP BY griglia.PIANO, griglia.LOTTO, griglia.FILA
ORDER BY griglia.FILA DESC , griglia.Loc DESC , griglia.Loc
PIVOT griglia.Loc;

Vorrei esportare tutti in un file Word che contenga una tabella con il campo Fila per colonna, in campo Loc per riga e il valore Espr1 come contenuto della cella in tabella.
Ho provato con questo codice
Visual Basic:
Private Sub Comando43_Click()

    Dim objWord As Object
    Dim objDoc As Object
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strTemplate As String
    Dim strQuery As String
    Dim tbl As Object
    Dim numCols As Integer
    Dim numRows As Integer
    Dim i As Integer
    Dim rowIndex As Integer

    On Error GoTo ErrHandler

    ' Percorso del modello Word
    strTemplate = "C:\control\dat\modello.docx"
    If Dir(strTemplate) = "" Then
        MsgBox "Il modello Word non esiste al percorso specificato.", vbCritical
        Exit Sub
    End If

    ' Nome della query
    strQuery = "gigi" ' Cambia con il nome corretto della query

    ' Aprire il database e il recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strQuery, dbOpenSnapshot)

    ' Verifica che la query restituisca dati
    If rs.EOF Then
        MsgBox "La query non ha restituito alcun record.", vbExclamation
        Exit Sub
    End If

    ' Aprire Word e il modello
    Set objWord = CreateObject("Word.Application")
    Set objDoc = objWord.Documents.Add(Template:=strTemplate)

    ' Creare una tabella in Word
    numCols = rs.Fields.Count ' Numero di colonne
    rs.MoveLast
    numRows = rs.RecordCount + 1 ' Numero di righe
    rs.MoveFirst

    Set tbl = objDoc.Tables.Add(objDoc.Content, numRows, numCols)
    tbl.Style = "Tabella Griglia"

    ' Inserire l'intestazione nella tabella
    For i = 0 To rs.Fields.Count - 1
        tbl.Cell(1, i + 1).Range.Text = rs.Fields(i).Name
    Next i

    ' Inserire i dati nella tabella
    rowIndex = 2
    Do While Not rs.EOF
        For i = 0 To rs.Fields.Count - 1
            If IsNull(rs.Fields(i).Value) Then
                tbl.Cell(rowIndex, i + 1).Range.Text = ""
            Else
                tbl.Cell(rowIndex, i + 1).Range.Text = rs.Fields(i).Value & ""
            End If
        Next i
        rs.MoveNext
        rowIndex = rowIndex + 1
    Loop

    ' Salvare il documento
    objDoc.SaveAs2 "C:\control\dat\Output.docx"
    objDoc.Close
    objWord.Quit

    MsgBox "Esportazione completata con successo!", vbInformation

ExitHandler:
    ' Rilasciare oggetti
    On Error Resume Next
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    Set objDoc = Nothing
    Set objWord = Nothing
    Exit Sub

ErrHandler:
    MsgBox "Errore durante l'esportazione: " & Err.Description, vbCritical
    Resume ExitHandler
End Sub

Ma mi restituisce sempre l'errore durante l'esportazione "L'elemento con il nome specificato non esiste"...
Esiste un modo più semplice per esportare le query in un file word con un pulsante rapidamente, dato che ho una trentina di query a campi incrociati da esportare e stampare...purtroppo dalle query non escono tutte le stesse colonne e righe a variano per questo mi verrebbe difficile e lungo fare 30 report ....
Allego foto di una query a campi incrociati e un file modello di word.

Grazie
 

gigi anca

Utente junior
Original poster
17 Giugno 2020
27
0
1
Access 2019
Cmq Ho risolto,
riga 48 "tbl.Style = "Tabella Griglia" togliendo le impostazioni griglia funziona perfettamente..