Export pivot naar vaste file

Status
Niet open voor verdere reacties.

Michiel Karel

Gebruiker
Lid geworden
14 feb 2007
Berichten
49
Hallo,

Omdat deze vraag onder zowel access als excel valt heb ik ze even onder beide fora gepost.

Ik heb een combobox in access waar ik 6 opties kan kiezen.
Wanneer er voor een optie is gekozen wordt de draaitabel (pivot) in een subform getoond.

Nu heb ik een knop ontworpen die via een case statement de correcte pivot exporteerd naar excel.

Maar elke keer als ik op deze knop druk, gooit access de pivot in een ander excel bestand (lees, een htm file in excel). Ik wil dit niet, en wil dat de pivot in 1 excel (.xls bestand) komt te staan.

In deze xls wil ik vervolgens de opmaak van het bestand verzorgen.

Ik wil deze excel automatisch laten opslaan met de datum in de naam. Zo kan ik later 2 pivots naast elkaar leggen en de gegevens vergelijken.

Heeft iemand een idee hoe ik dit voor elkaar kan krijgen?

Alvast bedankt!

Michiel
 
dank voor je reactie, ik zal de links direct bekijken.

de export naar excel functie is niet automatisch in te stellen, vandaar dat ik deze via een omweg in een macro heb kunnen maken.

Ik ben eigenlijk opzoek naar een geschikte vba code voor het hele plaatje, maar daar ben ik nog mee bezig.

bedankt nogmaals :)
 
Hey Bart,

Ik heb via VBA de volgende code geïmplementeerd:

================================================================
Private Sub Testknop_Click()
On Error GoTo err_Handler

MsgBox ExportRequest, vbInformation, "Finished"
Application.FollowHyperlink "C:\Documents and Settings\" & Environ("USERNAME") & "_" & Format(Date, "dd_mm_yy") & "_" & "test2.xls"

exit_Here:
Exit Sub
err_Handler:
MsgBox Err.Description, vbCritical, "Error"
Resume exit_Here

End Sub

Public Function ExportRequest() As String
On Error GoTo err_Handler

' Excel object variables
Dim appExcel As Excel.Application
Dim wbk As Excel.Workbook
Dim wks As Excel.Worksheet

Dim sTemplate As String
Dim sTempFile As String
Dim sOutput As String

Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim sSQL As String
Dim lRecords As Long
Dim iRow As Integer
Dim iCol As Integer
Dim iFld As Integer

Const cTabOne As Byte = 1
Const cTabTwo As Byte = 2
Const cStartRow As Byte = 8
Const cStartColumn As Byte = 1

DoCmd.Hourglass True

' set to break on all errors
Application.SetOption "Error Trapping", 0

' start with a clean file built from the template file
sTemplate = CurrentProject.Path & "\testtemp.xls"
sOutput = "C:\Documents and Settings\" & Environ("USERNAME") & "_" & Format(Date, "dd_mm_yy") & "_" & "test2.xls"


If Dir(sOutput) <> "" Then Kill sOutput
FileCopy sTemplate, sOutput

' Create the Excel Applicaiton, Workbook and Worksheet and Database object
Set appExcel = Excel.Application
Set wbk = appExcel.Workbooks.Open(sOutput)
Set wks = appExcel.Worksheets(cTabOne)

Select Case Soort_Rapport
Case 1
sSQL = "select * from pivot_data_rapport_1"
Case 2
sSQL = "select * from pivot_data_rapport_2"
Case 3
sSQL = "select * from pivot_data_rapport_3"
Case 4
sSQL = "select * from pivot_data_rapport_4"
Case 5
sSQL = "select * from pivot_data_rapport_5"
Case 6
sSQL = "select * from pivot_data_rapport_6"
Case Else
sSQL = "select * from """
End Select


Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(sSQL, dbOpenSnapshot)
If Not rst.BOF Then rst.MoveFirst

' For this template, the data must be placed on the 4th row, third column.
' (these values are set to constants for easy future modifications)
iCol = cStartColumn
iRow = cStartRow
If Not rst.BOF Then rst.MoveFirst

Do Until rst.EOF
iFld = 0
lRecords = lRecords + 1
Me.Repaint

For iCol = cStartColumn To cStartColumn + (rst.Fields.Count - 1)
wks.Cells(iRow, iCol) = rst.Fields(iFld)

If InStr(1, rst.Fields(iFld).Name, "Date") > 0 Then
wks.Cells(iRow, iCol).NumberFormat = "mm/dd/yyyy"
End If

wks.Cells(iRow, iCol).WrapText = False
iFld = iFld + 1
Next

wks.Rows(iRow).EntireRow.AutoFit
iRow = iRow + 1
rst.MoveNext
Loop

ExportRequest = "Total of " & lRecords & " rows processed."

exit_Here:
' Cleanup all objects (resume next on errors)
On Error Resume Next
Set wks = Nothing
Set wbk = Nothing
Set appExcel = Nothing
Set rst = Nothing
Set dbs = Nothing
DoCmd.Hourglass False
Exit Function

err_Handler:
ExportRequest = Err.Description
Resume exit_Here

End Function

=========================================================

het gaat met name om dit stuk:

Select Case Soort_Rapport
Case 1
sSQL = "select * from pivot_data_rapport_1"
Case 2
sSQL = "select * from pivot_data_rapport_2"
Case 3
sSQL = "select * from pivot_data_rapport_3"
Case 4
sSQL = "select * from pivot_data_rapport_4"
Case 5
sSQL = "select * from pivot_data_rapport_5"
Case 6
sSQL = "select * from pivot_data_rapport_6"
Case Else
sSQL = "select * from """
End Select


Zoals je ziet heb ik via een case statement de sSQL toegewezen aan de 6 verschillende tabellen. Dit werkt opzich prima, en er wordt keurig de juiste tabel naar m'n excel geëxporteerd die ik in m'n combobox heb gekozen als ik op de "testknop" druk.

MAAR, en nu komt het, hij neemt de titels van de kolommen niet mee :(.

Heb je enig idee hoe ik dit aan kan passen zodat dit wel gebeurd?

Ik heb al gekeken om de docmd.transferspreadsheet methode in m'n code te planten, maar dat lijkt me zelfstandig niet te gaan lukken, plus dat je dan imo niet de juiste locatie (lees: bijv. kolom 2, rij 12) kan toewijzen om de data neer te zetten.

Ik wil graag dat de lijsten die ik exporteer met die knop, direct worden omgezet in een pivot, en dat de lijst daarna verdwijnt. Ik vermoed dat dit allemaal wel met een excel macro te regelen zal zijn, maar dan heb ik wel de juiste kolom titels nodig. Anders pakt hij namelijk de eerste record en maakt hij daar een titel van, waarna vervolgens de inhoud van de pivot niet meer correct is omdat er 1 record mist.

Ik zou je erg dankbaar zijn als je hier even je licht op zou willen laten schijnen en mij van advies kan voorzien.

Mvg,

Michiel
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan