Avatar billede region Nybegynder
23. juli 2001 - 12:05 Der er 52 kommentarer og
1 løsning

Eksport til Excel

Så D\'herrer eksperter. så har jeg et MEGA problem der lyder som flg.( nedenstående er et eksempel )

Jeg har 4 queryes der indeholder forskellige data. Der er en kolonne i hver af disse der indeholder et nummer der kan forekomme flere gange.
(eks 1,2,3,2,osv)

De 10 første poster i hver af disse queryes ønskes eksporteret til et excelark hvor indholdet er selecteret på nummersystemet.

Sheet 1 skal da indeholde alt der vedrører nummer 1. Måden indholdet af de 4 queryes placeres
på i sheet 1 kommer bare fortløbende ( heading skal derfor med også).eks først kommer de 10 første poster fra q1 dernæst de 10 første fra q2 osv.

sheet 2 skal indeholde alt vedr. nummer 2 efter samme princip som sheet 1.

Håber nogen gider tage denne udfordring op.....
Avatar billede mugs Novice
23. juli 2001 - 12:13 #1
Bruger du 97 eller 2K?
Kommer de 4 q fra samme tabel, og hvad hedder denne? I benægtende fald, hvad hedder tbellerne og hvilke q er kommer herfra?

Mugs
Avatar billede region Nybegynder
23. juli 2001 - 12:23 #2
access 97

navn på queryes
q1 = 0-sale 3mth_gr all
q2 = 0-sale 6mth_gr all
q3 = all group stock greater 3mth sale
q4 = all group stock greater 6mth sale
q5 = gr all down

q1+2 kommer fra en anden query der hedder master
q3+4+5 kommer fra en anden query der hedder Qmaster

DER SKAL EKSPORTERES FRA DE BENÆVNTE Q1+2+3+4+5 IDET DER LIGGER FORMLER MM TILGRUND FOR DISSE.!!!

grunden til jeg ligeledes stiller spørgsmålet er at der måske kunne laves noget smart fremfor at skulle lave x-antal nye queryes. ( jeg har 127 af disse i forvejen)
Avatar billede mugs Novice
23. juli 2001 - 12:38 #3
Det var lidt af en streg i regningen, at der skal eksporteres fra en Q. Det må jeg tænke lidt over. en mulighed er, ay du ved en opdateringsforespørgsel sender data fra Q til en ny tabel ved en VBA-kommando. Når eksporten til Excel er færdig, kan du tømme denne tabel.

Selve kommandoen til eksporten kommer her:
 
Dim Obvar As Object, wkb As Object, Rst As Recordset
Dim I As Integer
Set Rst = DBEngine.Workspaces(0).Databases(0).OpenRecordset(\"TABELNAVN\", dbOpenTable)
Set Obvar = CreateObject(\"excel.application\")
Obvar.Visible = True
Set wkb = Obvar.Workbooks.Add
        wkb.Worksheets(\"Ark1\").Cells(1, 1).Value = \"KOLONNEOVERSKRIFT\"
   
For I = 2 To Rst.RecordCount + 1
        wkb.Worksheets(\"Ark1\").Cells(I, 1).Value = Str$(Rst.Fields![FELTNAVN])
             
Rst.MoveNext
Next
Set Obvar = Nothing
wkb.Worksheets(\"Ark1\").UsedRange.Columns.AutoFit

Det andet skal jeg som sagt tænke over

Mugs

Avatar billede mugs Novice
23. juli 2001 - 12:40 #4
Jeg glemte en ting:

Ved eksport af string-felter skal \"Str$\" erstattes af \"Format\"

Mugs
Avatar billede region Nybegynder
23. juli 2001 - 12:49 #5
Nu er jeg lidt novice indenfor VBA så lad mig lige spørge...

hvad skal disse navne erstattesmed i dit script.:
TABELNAVN
KOLONNEOVERSKRIFT
FELTNAVN
Avatar billede mugs Novice
23. juli 2001 - 12:56 #6
TABELNAVN skal erstattes med mavnet på den aktuelle tabel i Access hvor dine data er gemt.

KOLONNEOVERSKRIFT er overskriften på det nye Excel-ark. Teksten er valgfri.

FELTNAVN er navnet på feltet i tabellen, der skal eksporteres.

/ Mugs
Avatar billede region Nybegynder
23. juli 2001 - 13:06 #7
Hmmm...

ud fra dette betyder det vel at jeg skal eksportere dataene fra de 5 queryes ind i 5 nye tabeller. så skal jeg bruge dette script til at eksportere til excel. eller???

spørgsmål :
1/skal jeg ikke angive alle mine feltnavne da disse alle skal med ud til excel.??
2/skal jeg ikke have navngivet excelarket på nogen måde for at sikre at tabel 2+3+4+5 eksporteres til samme excel ark..??
3/selve sheet navnet hvor defineres dette i dit script eks at sheet 1 hedder \"2\" og sheet 2 hedder \"29\".
Avatar billede region Nybegynder
23. juli 2001 - 13:24 #8
jeg prøver lige at lukke her for at grænske lidt videre selv...

hvor meget skal du have for dit script.???
Avatar billede region Nybegynder
23. juli 2001 - 13:25 #9
1
Avatar billede region Nybegynder
23. juli 2001 - 13:25 #10
*G*

he he MUGS det var altså ikke mit bud til dig jeg her fik skrevet...*G*
Avatar billede mugs Novice
23. juli 2001 - 13:43 #11
spgm1:

2. kolonneoverskrift ser således ud:
wkb.Worksheets(\"Ark1\").Cells(1, 2).Value = \"KOLONNEOVERSKRIFT\"
hvor du blot ændrer destinationscellen.
3. Kolonneoverskrift vil få destinationen:
Cells(1, 3)

På samme måde med data, du ændrer blot destinationen, 2. datafelt ser således ud:
wkb.Worksheets(\"Ark1\").Cells(I, 2).Value = Str$(Rst.Fields![FELTNAVN])

Du definerer arket i denne linie:
wkb.Worksheets(\"Ark1\").Cells(1, 1).Value = \"KOLONNEOVERSKRIFT\"

spgm2:
Vil du eksportere til et andet ark, ændrer du blot (\"Ark1\") til noget andet. 

spgm3:
I linien:
Set Obvar = CreateObject(\"excel.application\")
laver vi en ny excel-applikation med ordene CreateObject.

Når du lukker Exccel sletter du filen, for du kan jo altid eksportere igen.

Der er dog ikke noget til hinder for, at du kan eksportere til en navngivet Excel-fil. på den måden kan du gemme Excel og overskrive det igen. Men hvorfor? Vil det ikke blot tage plads op.

Jeg er da glad for at 1 ikke er dit bud!! Jeg skal have hvad du mener det er værd, hvad kan du bruge det til og hvor langt kommer vi mod målet?

/Mugs               
Avatar billede region Nybegynder
23. juli 2001 - 13:51 #12
er 100 ok eller hvad synes du

Kom nu...jeg vil ikke have du føler dig snydt...
Avatar billede terry Ekspert
23. juli 2001 - 14:36 #13
Hi Region>
The weather is great today, but if you can wait until tomorrow then I am sure I can help you out!
Avatar billede region Nybegynder
23. juli 2001 - 14:48 #14
Terry

no problem im am however working on a solution myself, thus i need to get the job done.

So maybe the job variates a little bit from this tomorrow.
( I want to see if a can do it myself...but already know that this might be a problem *G* )


By the way ..

how is the Supply Chain Management deal with Solar going..???
Avatar billede mugs Novice
23. juli 2001 - 14:50 #15
100 meget fint

Mugs
Avatar billede region Nybegynder
23. juli 2001 - 14:55 #16
Jeg vender tilbage såfremt der er nogle justeringer ok....
Avatar billede region Nybegynder
23. juli 2001 - 14:57 #17
UPPPSSS MUGS  det kunne den ikke finde ud af eller rettere sagt det er ikke første gang den giver alle point væk...

Avatar billede mugs Novice
23. juli 2001 - 16:29 #18
Jeg opretter et spørgsmål i kategorien Access til 150 point, når du svarer accepterer jeg.

Jeg arbejder iøvrigt videre med overførsel af en Q.

/ Mugs
Avatar billede region Nybegynder
23. juli 2001 - 16:33 #19
lyder fint hvornår opretter du spørgsmålet..??
Avatar billede region Nybegynder
23. juli 2001 - 16:36 #20
glem det min browser var ikke lige opdateret....
Avatar billede mugs Novice
23. juli 2001 - 16:53 #21
Hvis du vil gemme dit Excel-ark er kommandoen som følger:

wkb.SaveAs \"C:\\Demo\\Mappe1.xls\"

Du kan naturligvis ændre stien.

/Mugs
Avatar billede terry Ekspert
23. juli 2001 - 20:20 #22
Region> Your comment \"how is the Supply Chain Management deal with Solar going..???\"

Not quite sure what you are refering to, help me out.
Solar has cropped up a few times overthe last month or so, so am a little confused!
Avatar billede region Nybegynder
24. juli 2001 - 08:31 #23
\"cropped up\".... ( means what...??? )

Jeg er ansat i Solar Koncernen og var sammen med vores daværende salgsdirektør og i mit daværende job som key account på Lego med til at starte hele projektet op. Fik Egon Hvergel fra Engineering ansat og overlod ham \"opgaven\" da jeg drog til koncernen i kolding.

( ..udsnit af min livshistorie...*G*)
Jeg kender et par stykker ved Lego-EDB bla. Kurt Neermann. Jeg tror faktisk du engang hjalp mig med noget access via mail foranlediget af KN.
Avatar billede terry Ekspert
24. juli 2001 - 09:30 #24
Cropped up = \"has been mentioned\"

The last time Solar was mentioned, I remembered that I had helped \"someone\" with an Access database, something to do with a search routine, but couldnt rememeber the name. Small world isnt it?

Terry






Avatar billede region Nybegynder
24. juli 2001 - 09:32 #25
sure is...
Avatar billede region Nybegynder
24. juli 2001 - 13:24 #26
Mugs>
jeg får en fejl i dit script ved linien..

wkb.Worksheets(\"Ark1\").Cells(1, 1).Value = \"branch nr\"
fejlen siger :
subscript out of range

hele scriptet ser således ud

Private Sub Form_Open(Cancel As Integer)
Dim Obvar As Object, wkb As Object, Rst As Recordset
Dim I As Integer
Set Rst = DBEngine.Workspaces(0).Databases(0).OpenRecordset(\"top10 down\", dbOpenTable)
Set Obvar = CreateObject(\"excel.application\")
Obvar.Visible = True
Set wkb = Obvar.Workbooks.Add
wkb.Worksheets(\"Ark1\").Cells(1, 1).Value = \"branch nr\"
   
For I = 2 To Rst.RecordCount + 1
        wkb.Worksheets(\"Ark1\").Cells(I, 1).Value = Str$(Rst.Fields![branch nr])
             
Rst.MoveNext
Next
Set Obvar = Nothing
wkb.Worksheets(\"Ark1\").UsedRange.Columns.AutoFit


End Sub
Avatar billede region Nybegynder
24. juli 2001 - 14:12 #27
>mugs.....

nu har jeg med megen hjælp fået oprettet en tabel hvor alle poster står i hvordan gemmer jeg denne i excel som beskrevet ovenfor hvor hvert sheet indeholder hver sin [branch nr]
Avatar billede terry Ekspert
24. juli 2001 - 14:13 #28
doo I get some points for an answer?
Avatar billede region Nybegynder
24. juli 2001 - 14:16 #29
hello again Terry...

depending on how much you want....
Avatar billede terry Ekspert
24. juli 2001 - 14:16 #30
300
No just joking!
Avatar billede region Nybegynder
24. juli 2001 - 14:18 #31
*g*... ja du har jo rigeligt  og du har ikke engang brug for disse...*GGG*

nej hvor meget synes du det er værd for en fattig mand som mig... hulk hulk...
Avatar billede terry Ekspert
24. juli 2001 - 14:21 #32
Lets first see how long it takes!
Avatar billede region Nybegynder
24. juli 2001 - 14:22 #33
you may answer the Qust.
Avatar billede region Nybegynder
24. juli 2001 - 14:25 #34
altså forstået som at du må komme med en løsning....
Avatar billede terry Ekspert
24. juli 2001 - 14:30 #35
OK!
Avatar billede terry Ekspert
24. juli 2001 - 15:04 #36
Dim db As Database
Dim rs As Recordset
Dim sSQL As String
Dim MyQry As QueryDef

    Set db = CurrentDb
   
    Set rs = db.OpenRecordset(\"tblBranch\")
   
    DoCmd.SetWarnings False
    DoCmd.RunSQL \"Delete * from tblNewTemp\"
   
    Do While Not rs.EOF
   
             
        sSQL = \"INSERT INTO tblNewTemp SELECT TOP 10 [gr all down].* FROM [gr all down] WHERE [gr all down].[branch nr] = \'\" & rs!BranchNr & \"\'\"
       
        DoCmd.RunSQL sSQL
       
       
        sSQL = \"SELECT * FROM tblNewTemp WHERE tblNewTemp.[branch nr] = \'\" & rs!BranchNr & \"\';\"
        \'Create a new querydef
        Set MyQry = db.CreateQueryDef(rs!BranchNr)
        MyQry.SQL = sSQL
        MyQry.Close
       
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, rs!BranchNr, \"D:\\test.xls\", False, \"\"
       
        db.QueryDefs.Refresh
        db.QueryDefs.Delete rs!BranchNr
           
        rs.MoveNext
       
    Loop
   
    DoCmd.SetWarnings False
   
    Call Shell(\"C:\\Program Files\\Microsoft Office\\Office\\EXCEL.EXE D:\\test.xls\", 1)
Avatar billede terry Ekspert
24. juli 2001 - 15:06 #37
You may also wish to delete the Excel file before starting to make sure it doesnt contain old sheets.

Off home now, will take a look later!

Avatar billede terry Ekspert
24. juli 2001 - 16:56 #38
region> I have briefly looked through your original question and I would imagine that all that about putting the data in a temp tables isnt necessary, thats if all you want is to get your informatiion into Excel.

Dim db As Database
Dim rs As Recordset
Dim sSQL As String
Dim MyQry As QueryDef

    Set db = CurrentDb
   
    Set rs = db.OpenRecordset(\"tblBranch\")

\'If test.xls exists then delete it....
   
    DoCmd.SetWarnings False
   
    Do While Not rs.EOF
           
        sSQL = \"SELECT TOP 10 [gr all down].* FROM [gr all down] WHERE [gr all down].[branch nr] = \'\" & rs!BranchNr & \"\'\"


\'It would be an idea to loop through the existing queries an delete if it exists (look at the Access app I sent to Solar)

        \'Create a new querydef
        Set MyQry = db.CreateQueryDef(rs!BranchNr)
        MyQry.SQL = sSQL
        MyQry.Close
       
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, rs!BranchNr, \"D:\\test.xls\", False, \"\"
       
        db.QueryDefs.Refresh
        db.QueryDefs.Delete rs!BranchNr
           
        rs.MoveNext
       
    Loop
   
    DoCmd.SetWarnings False
   
    Call Shell(\"C:\\Program Files\\Microsoft Office\\Office\\EXCEL.EXE D:\\test.xls\", 1)
Avatar billede region Nybegynder
24. juli 2001 - 17:09 #39
dt er også ok men der går noget galt i eksporten, fordi jeg har feks. i min tblbranch flg. filialer

2
3
5
7
12
13

i det eksportered exl ark er der kun 3 faneblade hvor det første er benævnt :
_  dette indeholder branch 7
_2  indeholder 12
_3  indeholder 13

den springer altså noget over samtidig med at den laver en underscore til at starte med...??
Avatar billede mugs Novice
24. juli 2001 - 20:19 #40
region > når Terry er på banen, plejer jeg at holde min mund. Dette kun for at du skal vide, at jeg ikke blot er stået af. Men dine og Terry\'s sidste par indlæg er \"græsk-katolsk\" for mig.

Jeg lytter med interesse.

Mugs
Avatar billede region Nybegynder
25. juli 2001 - 09:01 #41
fint nok
Avatar billede terry Ekspert
25. juli 2001 - 11:01 #42
sorry for not getting back sooner, have to do some work sometime!

region, I have no idea what you put in your tblbranch, is your \"filial\" number in the same field as branchnr? what you could do was have an extra field with type Yes/No named Filial for example. Set this to True if its a filial, and
then alter the line Set rs = db.OpenRecordset(\"tblBranch\") to Set rs = db.OpenRecordset(\"SELECT * FROM tblBranch WHERE Filial = False\"). This selects thsoe which are NOT filialer.

Otherwise I am not sure what is happening!
Avatar billede region Nybegynder
25. juli 2001 - 13:19 #43
sorry terry
filialnummeret er det samme som branch det hedder og branch jeg kom bare til at skrive det danske ord for branch...nemlig filial....
Avatar billede region Nybegynder
25. juli 2001 - 13:22 #44
please wait ...thus i am working on another perhaps more simpel solution...

STAND BY...PLEASE...
Avatar billede region Nybegynder
25. juli 2001 - 16:29 #45
som sagt så er indholdet af tblbranch =
2
3
5
7
12
13

field name = branchNr

det er som sagt i excel der står forkert eg.:


2
3
5
7
12
13

i det eksportered exl ark er der kun 3 faneblade hvor det første er benævnt :
_  dette indeholder branch 7
_2  indeholder 12
_3  indeholder 13

den springer altså noget over samtidig med at den laver en underscore til at starte med...??

Avatar billede terry Ekspert
25. juli 2001 - 19:47 #46
OK! I cant see what is happening from here so you will have to help.
First add the following three lines to justy before the DoCmd.TransferSpreadsheet line.
Then alter the DoCmd.TransferSpreadsheet line so that it contains sBranch and not rs!BranchNr.

Then run the code. to export to Excel.
Then press Ctrl+G (to open the debug window. You should be able to see the names of the \"filialer\" that have been exported to Excel. The lines should look something like this. If they dont then I can only assume that your code isnt as it should be. It works here...
If for some reason the names of the filialer get named the same then there will only be one faneblade with this name, obviously you cant have the same name more than once.  Anyway try it and let me know what happens.

Fil: 2
Fil: 3
Fil: 5
Fil: 7
Fil: 12
Fil: 13




Dim sBranch as string
sBranch = \"Fil: \" & rs!BranchNr
debug.print sBranch

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, sBranch, \"D:\\test.xls\", False, \"\"
       
       
Avatar billede region Nybegynder
26. juli 2001 - 08:20 #47
???

du må undskylde terry men jeg kan ikke se logikken i det du skriver.... hvorfor skal vi lige pludselig til at DIM noget sBranch..???

der er ikke nogen steder i min DB der står noget med filial eller lign. Jeg var bare kommet til at skrive filial i tksten her på eksperten istedet for branch nr, fordi det danske ord for branch er filial.

I mit excel ark skal de forskellige sheets bare hedde :
2
3
5
osv....

og nej jeg har ikke \"dobbelte\" branch nr i tabellen...

jeg ville dog hellere at vi gjorde noget andet med det exporteren ....
( som jeg skrev var jeg ved at lave en lille ændring)

jeg har en samlet tabel med alle nødvendige oplysninger nu. kan jeg ikke exportere denne til excel med nogle kriterier.

exporten skal gennemse posterne i tblbranch og for hver af disse branchnr skal den eksportere ud i et seperat excelark :

eks.:

såfremt der i tblbranch står :

2
3
5

skal den først gemme et excelark på d-drevet i en ny mappe der hedder test som indeholder alle poster fra tabellen (top10)hvor branchnr = 2

så skal den gå til næste post og gemme et excel ark med alle poster hvor branchnr = 3 i d:\\test\\ 

osv.


Den ultimative løsning ville være at kunne gemme rapporter som worddokumenter på samme vis som dette eksempel, da jeg i rapporter kan lave et bedre layout.
Avatar billede terry Ekspert
26. juli 2001 - 08:42 #48
You want to export each \"Branch\" to a seperate Excel file, and not one sheet per branch in the same file, is that correct?

It isnt possible to perform one DoCmd.TransferSpreadsheet and create a seperate file for each branch, but you can loop through tblBranch as mentioned in the previos examples and create a file for each.
But as I was trying to explain in my comment 19:47:03 it seems that something is getting converted incorrectly and hence we arent getting all branches, and if we cant find this then I would assume we will get the same problem when we create a seperate file. But let see if I am right!

replace the DoCmd.TransferSpreadsheet line with DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, rs!BranchNr, \"D:\\test\\Filial_\" & rs!BranchNr, False, \"\"


Avatar billede proaccess Nybegynder
26. juli 2001 - 08:46 #49
Region> Prøv at lege lidt med denne...

Public Sub exportRegionToExcel(lngBranch As Long)
  Dim q As QueryDef
  Set q = CurrentDb.CreateQueryDef(\"ZZZ_TempExport\", \"SELECT * FROM TOP10 WHERE Branch=\" & lngBranch)
  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, \"ZZZ_TempExport\", \"D:\\TEST\\\" & lngBranch & \".xls\", , \"Ark1\"
  CurrentDb.QueryDefs.Delete \"ZZZ_TempExport\"
End Sub

Public Sub test()
  Dim te As Long
  For te = 1 To 11
    exportRegionToExcel te
  Next
End Sub
Avatar billede terry Ekspert
26. juli 2001 - 08:56 #50
proaccess> Thats a good idea, but it seems that region has a number of \"filialer\" and not numbered from 1 to 11. So I have suggested he have a table containing the numbers he is interested in. Then loop through the table creating a sheet per \"filial\". But there is a problem where not all \"filialer\" are getting written to the file. I was trying to locate the problem by suggestion to region that he write each filial nuber to the debug window so HE could see waht was comming out of it!
Avatar billede terry Ekspert
26. juli 2001 - 09:01 #51
The line should be
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, rs!BranchNr, \"D:\\test\\Filial_\" & rs!BranchNr & \".xls\", False, \"\"




Avatar billede region Nybegynder
26. juli 2001 - 09:02 #52
Jeg har efterhånden lavet så meget kage i mit script fordi jeg hele tiden har bedt om at få det lavet om...

jeg opretter lige et helt nyt spørgsmål på dette, fordi \"jeg ka\' ik\' hitte u a\'et...\"...

http://www.eksperten.dk/spm/92326

er der nogen her der ud over det nye spørgsmål vil have nogle point er det nu der skal råbes op...så vi kan lukke dette allerede lukkede spørgsmål...

Avatar billede proaccess Nybegynder
26. juli 2001 - 09:04 #53
Terry> I also got into the problem of sheets numbers, that didn\'t match up... It seems to fail on the last parameter og the TransferSpreadsheet, where 1 character is truncated and spaces are being replaced by underscores... default setting for this parameter (as you are using) are this altered recordsetname...

Region> Du behøver ikke at loope gennem 1-11, som jeg gør, brug eventuelt Terrys forslag om en tabel til Branchnumre eller:

Public Sub test()
  Dim RA as RecordSet
  Set RA=CurrentDB.OpenRecordset(\"SELECT DISTINCT Branch FROM TOP10;\")
  While Not RA.EOF
    exportRegionToExcel RA!Branch
    RA.MoveNext
  Wend
  RA.Close
  Set RA=Nothing
End Sub
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