19. januar 2005 - 22:42Der er
19 kommentarer og 1 løsning
DoCmd.OutputTo EXCEL og gemme op i EXCEL97 format
Jeg har dannet noget kode som gemmer en Access-Raport over i Excel fil. Koden ser således ud: DoCmd.OutputTo acOutputReport, "Rapport",_ acFormatXLS, "C:\Bookning\Shipping.xls", False
Excel-filen som der her dannes bruges af andre. Nu er det så at jeg bliver spurt om ikke filen kan formateret. Jeg har så forsøgt mig med denne kode:
Function StyrExcel() Dim MyXL As Object DoCmd.OutputTo acOutputReport, "Rapport", acFormatXLS, "C:\Bookning\Shipping.xls", False
Set MyXL = Excel.Application MyXL.workbooks.Open ("c:\bookning\shipping.xls") With MyXL.Application .Cells.Select .Selection.Font.Size = 7 .Cells.EntireColumn.AutoFit .Save .Quit End With Set MyXL = Nothing End Function
Når programmet køres får nu automatisk et spørgsmål "Vil du erstatte eksisterende GENOPTAG.XLW" - Hvorfor gemmer den nu en fil på harddisken som jeg ikke mener at have anmodet om ? Efter at have svaret JA til dette spørgsmål får jet et nyt spørgsmål. Filen som jeg henter frem er gemt i et tidligere Excel-Format. Vil jeg nu gemme i dette format (Excel 97). Svaret hertil er JA - jeg vil gerne gemme i format 97. Excel-filen er nu som den skal være. Spørgsmålet er nu hvordan jeg undgår de 2 spørgsmål således at det hele foregår automatisk.
Det frakobler Access advarsler. Men True sætter advarslerne ud af kraft i HELE applikationen, så du skal altid være omhyggelig med at tilkoble dem igen i slutningen. Eller bliver du ikke promptet for evt. fatale fejl.
Det virker ikke - jeg får igen spørgsmålet om jeg vil overskrive GENOPTAG.XLW og om jeg vil gemme i et andet format. Kan man gemme DoCmd.OutputTo acOutputReport, "Rapport",_ acFormatXLS ... i format 97 ??
Når jeg kompilerer får jeg nu informationen at 'Der opstod en kompileringsfejl - Metoden eller datamedlemmet blev ikke fundet' og .DisplayAlerts markeres.
Microsoft Excel 8.0 Object Library er -/har været 'vinget' af hele tiden. Klokken er sent nu så jeg vender tilbage senere på ugen og ser om i har noget i 'godteposen'
Så er jeg på banen igen. Er der nogen som har løsningen til denne udfordring. Eventuelt en ny kode som gemmer en Rapport ned i en Excel-fil før eller efter at have fået lov til at formatere Excel´s rækker til mindst mulig bredde pr. automation. Rapporten er dannet ud fra en forespørgsel.
Grunden til at jeg ikke brugte forespørgselen i stedet for rapporten var nok den at jeg tog for givet at det ville give samme problem. Men det skulle ikke være uprøvet, så jeg har prøvet koden DoCmd.TransferSpreadsheet acExport ... af og fik det samme problem ud af det. Den kode som du henviser til er fremmed for mig. Hvad skal der mere til for at få den til at fungere ?
Her er den fulde kode, men jeg tror ikke du får ret meget ud af den. Men læg din e-mail, så sender jeg db:
Dim Obvar As Object, wkb As Object, Rst As Recordset ' Variabelerklæringer Dim i As Integer, Felt1 As Integer, Felt2 As Integer, Tek As String On Error GoTo Errorhandler 'Slår alle systemadvarsler fra, jeg gider bare ikke at se på dem DoCmd.SetWarnings False 'Kører en en tilføjelsesforespørgsel, der sender alle poster i Forespørgsel1 over i den temporære tabel DoCmd.OpenQuery "tilføjtemp" 'Hvis du har oprettet en ny post, skal tabellen først opdateres, ellers ses den nye post ikke i Excel 'Me er den aktive formular og Refresh opdaterer den underliggende tabel / forespørgsel. Me.Refresh 'Næste sætning definerer hvilken tabel der skal levere data og åbner denne Set Rst = DBEngine.Workspaces(0).Databases(0).OpenRecordset("temp", dbOpenTable) 'Excel åbnes ved hjælp af funktionen "CreateObject" Set Obvar = CreateObject("excel.application") 'Gør Excel synlig, Du kan også flytte denne linie længere ned... 'hvis eksporten skal være afsluttet når Excel bliver synlig Obvar.Visible = True 'Variablen wkb sættes = projektmappen, der tilføjes med metoden Add Set wkb = Obvar.Workbooks.Add 'Der sættes overskrifter på Excel-arket wkb.Worksheets("Ark1").Cells(1, 1).Value = "Felt 2" wkb.Worksheets("Ark1").Cells(1, 2).Value = "Felt 1" 'Løkken der henter data fra tabel1 i Access og lægger data ind i Excel... 'Hvis der ekporteres tekst erstattes "Str$" med "Format" For i = 2 To Rst.RecordCount + 1 wkb.Worksheets("Ark1").Cells(i, 1).Value = Str$(Rst.Fields![Felt2]) wkb.Worksheets("Ark1").Cells(i, 2).Value = Str$(Rst.Fields![Felt1]) Rst.MoveNext Next 'Summen af felt2 udregnes Tek = "=Sum(R[" + Str$(-Rst.RecordCount) + "]C:R[-1]C)" wkb.Worksheets("Ark1").Cells(Rst.RecordCount + 2, 2).Value = Tek 'Linien tilpasser bredden af benyttede kolonner wkb.Worksheets("Ark1").UsedRange.Columns.AutoFit 'Objektvariablen frigives Set Obvar = Nothing 'kører en sletteforespørgsel, der sletter alle poster i den temporære tabel DoCmd.OpenQuery "slettemp" 'Slår alle systemadvarsler til, husk altid at gøre dette hvis du har slået dem fra i starten af koden DoCmd.SetWarnings True Errorhandler: If Err.Number = 94 Then Resume Next End If
Takker - og, nåja øv. Som du skriver andet steds benytter du Access2000. Jeg benytter Access97. Jeg er begyndt at studere din ovenstående kode og vender tilbage om et par dage når jeg har afprøvet mulighederne.
Function StyrExcel() Dim MyXL As New Excel.Application Dim xlWB As Workbook Dim xlWS As Worksheet DoCmd.OutputTo acOutputReport, "tblProduktion", acFormatXLS, "C:\Shipping.xls", False Set xlWB = MyXL.workbooks.Open("c:\shipping.xls") Set xlWS = xlWB.Sheets(1) With xlWS .Cells.Font.Size = 7 .Cells.EntireColumn.AutoFit End With MyXL.DisplayAlerts = False xlWB.Close savechanges:=True MyXL.DisplayAlerts = True MyXL.Quit Set MyXL = Nothing Set xlWB = Nothing Set xlWS = Nothing End Function
Bingo... Det var koden der skulle bruges. Jeg vil gerne sige tak til mugs og kabbak for aktiv medvirken ved dette inlæg. Og selfølgelig tak til bak som stiller den fungerende kode til rådighed. For denne kode vil jeg gerne tildele de 60 point, men da jeg er ny her på eksperten er jeg i tvivl om hvorledes jeg 'rammer' det rigtige navn. Herover kan jeg læse mugs og til højre for navnet er knappen Accepter. Skal jeg bare trykke på Accepter og vil jeg derved bliver ført videre til en side hvor jeg kan vælge bak og tildele point´s.
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.