Avatar billede Slettet bruger
03. juni 2004 - 11:14 Der er 9 kommentarer og
1 løsning

Visning af tabeller og forespørgsler i Excel (fra Access)

Hej alle

I access kan man via office links, udgive rapporter i f.eks. Excel.

Mit spørgsmål lyder på, om det via VBA kan lade sig gøre at udgive tabeller og forespørgsler på samme måde.

Det skal være sådan at man i Access kan klikke på en knap i en formular og det så bliver åbnet direkte i excel.

Det eneste jeg kan pt. er at eksportere det først (i VBA), og så derefter manuelt åbne det i Excel.

Håber i kan hjælpe

vh
Jimmi
Avatar billede Slettet bruger
03. juni 2004 - 11:14 #1
Det gælder i øvrigt Access 2002 og op
Avatar billede mugs Novice
03. juni 2004 - 11:25 #2
Denne åbner en foruddefineret Excel-fil:

Dim xls As New Excel.Application
'Gør Excel synlig
xls.Visible = True
xls.Workbooks.Open Filename:="D:\VBA\XP\Mappe1.xls"
'Lukker Access
DoCmd.Quit
Avatar billede hubs Nybegynder
03. juni 2004 - 11:43 #3
Jeg har selv brugt følgende:

Private Sub ExportData2_Click()
On Error GoTo Err_ExportData2_Click
' Export Non-Dry Analyses Data to Excel

    ' Confirm Desire to Export
    Msg = "Do you want to export data to Excel?"
    Style = vbYesNo + vbExclamation + vbDefaultButton1
    Title = "Export Data"
    Response = MsgBox(Msg, Style, Title)
    If Response = vbNo Then GoTo Exit_ExportData2_Click

    strSQL = "SELECT * FROM [Chemical Analysis 2] WHERE RawMaterialName = '" & Me.RawMaterialName & "' ORDER BY TestDate DESC"
    Set qdf = CurrentDb.CreateQueryDef("ExcelExport", strSQL)  ' Define and Creat a Query
    ExportToExcel CurrentDb.QueryDefs("ExcelExport").SQL        ' Initiate ExportToExcel Function
    DoCmd.DeleteObject acQuery, "ExcelExport"                  ' Delete Query
   
Exit_ExportData2_Click:
    Exit Sub

Err_ExportData2_Click:
    MsgBox Err.Description
    Resume Exit_ExportData2_Click
   
End Sub

Public Function ExportToExcel(strSQL As String)
On Error GoTo Err_ExportToExcel
' Export Data to Excel Based on Previously Defined Query

    Screen.MousePointer = 11        ' Set Cursor Type to 'Busy' (hourglass)

    ' Prepare Excel Sheet
    Dim Exl As New Excel.Application
    Dim WrkBook As Excel.Workbook
    Dim rs As DAO.Recordset
    Dim i As Integer, j As Integer

    Set WrkBook = Exl.Workbooks.Add
    Set rs = CurrentDb.OpenRecordset(strSQL)    ' Open Database Recordset

    If rs.EOF And rs.BOF Then GoTo Exit_ExportToExcel
    rs.MoveLast
    rs.MoveFirst                                ' Set Pointer at Start of Recordset
   
    ' Insert Default Field Names in Excel and Define Column Width
    For j = 1 To rs.Fields.Count - 1
        WrkBook.Sheets(1).Cells(1, j).Value = rs.Fields(j).Name
        strVAR = Len(rs.Fields(j).Name) + 2
        If strVAR < 6 Then
            strVAR = 6
        End If
        WrkBook.Sheets(1).Cells(1, j).ColumnWidth = strVAR
    Next j
        WrkBook.Sheets(1).Cells(1, 1).ColumnWidth = strVAR + 10
   
    ' Export Recordset Data to Excel Row by Row
    For i = 1 To rs.RecordCount
      For j = 1 To rs.Fields.Count - 1
        WrkBook.Sheets(1).Cells(i + 2, j).Value = rs.Fields(j)
      Next j
      rs.MoveNext
    Next i
    WrkBook.Sheets(1).Columns(4).NumberFormat = "dd/mm/yyyy" ' Predefine Date-Column Format
    Exl.Visible = True  ' Open Excel Sheet

    ' Clean Up
    rs.Close
    Set rs = Nothing
    Set WrkBook = Nothing
    Set Exl = Nothing

Exit_ExportToExcel:
    Screen.MousePointer = 0    ' Set Cursor to 'Normal' Format
    Exit Function

Err_ExportToExcel:
    MsgBox Err.Description
    Resume Exit_ExportToExcel

End Function
Avatar billede Slettet bruger
03. juni 2004 - 11:43 #4
Det lyder umiddelbart meget fornuftigt mugs, men hvis en bruger åbner rapporten 2 gange vil han så ikke blive bedt om at overskrive den "gamle" fil?

Jeg ville helst uden om temp filer, men det bliver vist svært.
Avatar billede hubs Nybegynder
03. juni 2004 - 11:45 #5
Du kan bare ta hva du ka bruge c",)
Husk reference til Microsoft Excel xx.x Object Library
Avatar billede mugs Novice
03. juni 2004 - 12:26 #6
jklln > koden åbner kun filen, men tager ikke hensyn til om du har eksporteret. Du skal nok se lidt på hubs kode.
Avatar billede Slettet bruger
03. juni 2004 - 12:40 #7
jeg har selv kode der eksporterer, men skal bare lige sikre mig at evt. filer der i forvejen ligger der, bliver overskrevet.

hubs kode er lidt for omstændig men det kan da også ske jeg kan optimere lidt på den ;-)
Avatar billede Slettet bruger
03. juni 2004 - 13:04 #8
Private Sub XX_Click()
Dim xls As New Excel.Application

'Danner eksportfil
DoCmd.TransferSpreadsheet acExport, 8, "Systemrapport", "C:\Mappe1.xls", True
'Gør Excel synlig
xls.Visible = True
xls.Workbooks.Open FileName:="C:\Mappe1.xls"

Her er den færdige version af koden, men jeg har stadig et lille problem.

Jeg vil gerne have mappe1 som en temp fil, men når ejg sætter alle mine rapporter til at skrive til denne fil, laver de bare en ny fane i filen, i stedet for at overskrive den.
Avatar billede hubs Nybegynder
03. juni 2004 - 13:11 #9
Er ikke sikker men hvis data alligvel bare skal overskrives, kan du så ikke bare delete arket først?

Altså noget i retning af "WrkBook.Sheets(1).Delete"
Avatar billede hubs Nybegynder
03. juni 2004 - 14:22 #10
Kan du få det til at virke? Ellers må du lige sige til c",)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester