Avatar billede danethan Nybegynder
26. juni 2001 - 11:40 Der er 8 kommentarer og
1 løsning

Samme Path som current Db og format

Jeg har følgende kode i en flerebruger Db:


    Dim stQueryReportWorkName As String
    Dim stReportWorkFileName As String
   
    \' Generates Excel Rapport from Query
    stQueryReportWorkName = \"Qry_WorkReport_Crosstab\"
    stReportWorkFileName = \"TimeCardReportByWork.xls\"
   
    DoCmd.OutputTo acOutputQuery, _
    stQueryReportWorkName, _
    acFormatXLS, stReportWorkFileName, True

Problemet er at TimeCardReportByWork.xls filen bliver genereret lokalt i Excel\'s sidst gemt og benyttet Dir.
Men jeg vil gerne gemme den i samme Dir som min Db (CurrentDb) set fra brugeren af.

Og desuden gemmer den filen som en Excel-5 fil og ikke som en Excel-9/2000 fil.


/DE
Avatar billede proaccess Nybegynder
26. juni 2001 - 11:45 #1
Kan du ikke bare sætte CurrentDB foran filnavnet?

DoCmd.OutputTo acOutputQuery, _
    stQueryReportWorkName, _
    acFormatXLS, CurrentDB() & \"\\\" & stReportWorkFileName, True

Formatet, er vist det seneste som din version af Access kan gemme i, og derfor afhøngigt af Access og ikke Excel.
Avatar billede proaccess Nybegynder
26. juni 2001 - 11:46 #2
afhøngigt => afhængigt !!!

Det går af og til FOR hurtigt... ;-)

Avatar billede terry Ekspert
26. juni 2001 - 11:50 #3
Try this instead...
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel5, \"Qry_WorkReport_Crosstab\", \"Your path\\filename\"

or something like that....

Avatar billede proaccess Nybegynder
26. juni 2001 - 12:05 #4
Du kan få det aktive directory ved funktionen CurDir(), og ikke som jeg skrev før CurrentDB().

Derefter bør du nok overveje at bruge transferSpreadsheet, som angivet af Terry.
26. juni 2001 - 14:09 #5
Undskyld jeg blander mig, men CurDir angiver jo kun den aktuelle mappe. Den har ikke (nødvendigvis) noget med den mappe, som currentdb ligger i. Blot den mappe brugeren sidst har været i.

Currentdb.Name giver sti + filnavn på databasen. Herved kan man udtrække stien. F.eks. ved denne funktion:

Function GetPath() As String
    Dim Pos As Integer, Path As String
    Path = currentdb.Name
    Pos = Len(Path)
    Do Until Mid(Path, Pos, 1) = \"\\\"
        Pos = Pos - 1
    Loop
    GetPath = Left(Path, Pos)
End Function

Herefter kan du Transfer eller Output\'e som du vil :o)

/Thomas
Avatar billede proaccess Nybegynder
26. juni 2001 - 14:16 #6
>Thomas, du skal da ikke undskylde, og SLET ikke når du har fuldstændigt ret !!!
Avatar billede danethan Nybegynder
27. juni 2001 - 14:11 #7
Tja- Thomas det er nu ikke for dit nuværende svar at du får point, da jeg læser dit svar som om at man rammer midt i pathen og finder \"\\\" ??? Men der er jo ikke nogen garanti for at pathen ikke r lang - så ???

Men du får point for et andet svar som du har givet hvor du bruger CurrentProject.Path i en anden sammenhæng og det virker :-)
Nu ville jeg godt have henvist til dette spørgsmål men jeg kan ikke finde det idag (jeg kunne igår) :-(

/DE
Avatar billede danethan Nybegynder
27. juni 2001 - 14:20 #8
Så fandt jeg spørgsmålet som gav mig hint og svar:
http://www.eksperten.dk/spm/75356

/DE
27. juni 2001 - 20:25 #9
Hej Danathan,

Takker selvfølgelig for pointene, selvom jeg ikke helt føler, at jeg har fortjent dem ;)

Men du tager fejl i din antagelse af at min funktion rammer midt i path\'en og finder \"\\\". Det er forkert. Jeg finder ALTID den sidste \"\\\" i stien, hvorved funktionen virker uanset længde på stien.
(Du tænker nok på udtrykket \"Mid\", som bruges i min funktion!? Selvom navnet antyder at man benytter Midten af stien, så er dette navn blot valgt for at kunne skelne mellem 2 lignende udtryk, nemlig \"Left\" og \"Right\".)

Jeg beklager dog at jeg ikke med det samme gav dig det \'rigtige\' svar, da det er det mest indlysende når man bruger Access 2000. Jeg lod mig simpelthen vildlede af nogle af de andres svar - Her blev CurrentDB benyttede (som er en typisk Access 97-måde at gøre det på). CurrentProject.Path blev først indført i fbm ADO i Access 2000, og derfor ville jeg ikke foreslå denne løsning.

Det viser blot hvor vigtigt det er, at man altid angiver hvilken version af Access, man benytter. Simpelthen fordi der er så mange forskelle (jeg ved godt at man kan lave referender til både ADO og DAO osv).

Men det var godt, at du selv sporede dig frem til det rigtige svar.

/Thomas
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