Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    54

    [VBA] Esportare risultato di una query

    Salve ragazzi,
    vorrei esportare il risultato di una query in un foglio excel o in qualsiasi altro formato stampabile o inviabile via email. come faccio?

    Avevo pensato anche ad una query di creazione tabella ma poi la tabella dovrei esportarla a mano. Io voglio una procedura in automatico.

    Grazie dell'aiuto

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    54
    Allora ragazzi,
    sono riuscito a caricare il risultato della query in una listbox tramite il comando:

    Me.list.Rowsource = strSQL

    Ora vorrei che alla pressione di un pulsante, il contenuto della listbox sia memorizzato in una tabella al massimo da esportare a mano

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ma il VBA da dove lo stai utilizzando ?
    Da Excel o da Access ?

    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    54
    Access

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Non conosco l'ambiente MS-Access, puoi fare in diversi modi:

    1. Tramite ADO
    http://forum.masterdrive.it/visual-b...-riga-17415/#9

    2. Tramite Office Automation
    http://forum.masterdrive.it/visual-b...excel-17343/#7

    Oppure, potresti anche farlo direttamente da Excel con il metodo:
    CopyFromRecordset
    http://msdn.microsoft.com/en-us/library/aa165427(office.10).aspx

    Ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    54
    ciao,
    ho risolto con il seguente codice

    Set xlApp = CreateObject("Excel.Application")
    Set xlWb = xlApp.Workbooks.Add
    Set xlWs = xlWb.Worksheets("Foglio1")

    xlApp.Visible = True 'Apre Excel
    xlApp.UserControl = True

    'Inserisco nelle celle Excel il nome dell colonne del db
    fldCount = rs.Fields.Count
    For iCol = 1 To fldCount
    xlWs.Cells(1, iCol).Value = rs.Fields(iCol - 1).Name
    Next

    If Val(Mid(xlApp.Version, 1, InStr(1, xlApp.Version, ".") - 1)) > 8 Then

    xlWs.Cells(2, 1).CopyFromRecordset rs

    Else

    recArray = rs.GetRows
    recCount = UBound(recArray, 2) + 1 '+ 1 since 0-based array

    For iCol = 0 To fldCount - 1
    For iRow = 0 To recCount - 1
    ' Take care of Date fields
    If IsDate(recArray(iCol, iRow)) Then
    recArray(iCol, iRow) = Format(recArray(iCol, iRow))
    ' Take care of OLE object fields or array fields
    ElseIf IsArray(recArray(iCol, iRow)) Then
    recArray(iCol, iRow) = "Array Field"
    End If
    Next iRow 'next record
    Next iCol 'next field

    End If

    ' Auto-fit delle colonne e righe
    xlApp.Selection.CurrentRegion.Columns.AutoFit
    xlApp.Selection.CurrentRegion.Rows.AutoFit

    Il problema è che alle colonne access passa i nomi delle colonne in tabella io invece voglio passargli le etichette. Non so nome colonna stato_contratto invece io voglio passargli l'etichetta "Stato del Contratto"

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Per modificare il nome della colonna hai due alternative:

    1) usare gli alias nella query.
    Cioè, invece di scrivere
    codice:
    SELECT stato_contratto, campo2, campo3, ...
    devi usare
    codice:
    SELECT stato_contratto As [Stato del Contratto], campo2, campo3, ...
    Le parentesi quadre sono necessarie solo se il nome che usi contiene spazi o caratteri speciali o è un nome riservato (classici caso: PASSWORD, NOTE, ...).
    Da ciò ne conviene che non puoi usare gli alias se usi la sintassi SELECT * (che tra l'altro non andrebbe mai usata).


    2) modificare il nome nel ciclo
    Cioè:
    codice:
    For iCol = 1 To fldCount
        Select Case lcase$(rs.Fields(iCol - 1).Name)
        Case "stato_contratto "
            xlWs.Cells(1, iCol).Value = "Stato del Contratto"
        Case Else ' uso quella originale
            xlWs.Cells(1, iCol).Value = rs.Fields(iCol - 1).Name
        End Select
    Next
    Ciao

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    54
    Capito, penso che adotterò la seconda soluzione quella con SELECT stato_contratto As [Stato del Contratto].

    :-)

  9. #9
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da fransyk
    Capito, penso che adotterò la seconda soluzione quella con SELECT stato_contratto As [Stato del Contratto].

    :-)
    ehm, veramente è la prima! :quote:


    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.