Avatar billede fldksvj Nybegynder
19. januar 2005 - 22:42 Der 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.
Avatar billede mugs Novice
19. januar 2005 - 22:46 #1
Prøv at indsætte:

docmd.setwarnings false

i starten af din kode, og i slutningen:

docmd.setwarnings true
Avatar billede mugs Novice
19. januar 2005 - 22:47 #2
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.
Avatar billede fldksvj Nybegynder
19. januar 2005 - 23:05 #3
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 ??
Avatar billede kabbak Professor
19. januar 2005 - 23:13 #4
prøv så med excel koderne

Application.DisplayAlerts = False

Application.DisplayAlerts = True

det er det samme som mugs svar i access
Avatar billede fldksvj Nybegynder
19. januar 2005 - 23:22 #5
Når jeg kompilerer får jeg nu informationen at 'Der opstod en kompileringsfejl - Metoden eller datamedlemmet blev ikke fundet' og .DisplayAlerts markeres.
Avatar billede kabbak Professor
19. januar 2005 - 23:26 #6
ok, jeg var ikke sikker på at den forstod excel.

prøv at sætte reference til Microsoft Excel xx.x objekt librayy
Avatar billede fldksvj Nybegynder
19. januar 2005 - 23:31 #7
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'
Avatar billede fldksvj Nybegynder
20. januar 2005 - 19:46 #8
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.
Avatar billede mugs Novice
20. januar 2005 - 19:51 #9
Hvorfor eksporterer du ikke blot forespørgslen i stedet for rapporten?
Avatar billede mugs Novice
20. januar 2005 - 19:54 #10
Jeg benytter Office XP med Access2000 og eksporterer ved hjælp af en VBA kode. Den sidste linie i denne kode er.

wkb.Worksheets("Ark1").UsedRange.Columns.AutoFit

som tilpasser bredden af anvendte kolonner i Excel. Jeg kan sende dig en testdb hvis du ønsker.
Avatar billede fldksvj Nybegynder
20. januar 2005 - 20:22 #11
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 ?
Avatar billede mugs Novice
20. januar 2005 - 20:26 #12
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
Avatar billede fldksvj Nybegynder
20. januar 2005 - 20:33 #13
Nåda - det er nok et par linier. Du må meget gerne sende din DB til
svend_jensen@stofanet.dk
Jeg prøver i mellemtiden at se på denne kode.
Avatar billede mugs Novice
20. januar 2005 - 20:39 #14
Sendt.
Avatar billede fldksvj Nybegynder
20. januar 2005 - 21:33 #15
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.
Avatar billede mugs Novice
20. januar 2005 - 21:34 #16
OK
Avatar billede bak Seniormester
20. januar 2005 - 21:51 #17
Dette kan gøre jobbet :-)

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
Avatar billede bak Seniormester
20. januar 2005 - 21:57 #18
bemærk lige at jeg har brugt en af mine egne rapporter og min egen sti :-)
Avatar billede fldksvj Nybegynder
21. januar 2005 - 19:16 #19
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.
Avatar billede bak Seniormester
21. januar 2005 - 19:31 #20
Jeg skal lige skrive et svar :-)
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