Avatar billede sigyn Seniormester
04. september 2014 - 13:36 Der er 8 kommentarer

Gemme accessrapport som pdf uden at evt. eksistrende overskrives

Jeg har nogle rapporter i en access2010 database, som jeg gemmer hver uge som PDF-filer  med nedenstående makro. Men hvis jeg af en eller anden grund, skal gemme igen, altså en udgave 2, overskriver den bare den første, uden advarsel. Hvordan får jeg den til at komme med advarslen, som normalt når man er ved at gemme oveni, og gerne med en prompt, så man kan tilføje udgave nr.



Private Sub cmdGemRapportUge_Click()

Dim Filnavn As String

Filnavn = "Uge" & "" & Me!lblUgeFør & "" & "Statusrapport" & ".pdf"

DoCmd.OpenReport "rptTotalerTilKPI", acViewPreview, , , acHidden

DoCmd.OutputTo acOutputReport, "rptTotalerTilKPI", "PDFFormat(*.pdf)", "Q:\MinSti1\MinSti2\MinSti3\Ugerapporter\2014\" & Filnavn, False, "", , acExportQualityPrint

DoCmd.Close acReport, "rptTotalerTilKPI"

End Sub
Avatar billede bvirk Guru
05. september 2014 - 12:19 #1
Blot overskriv eller ej mulighed:

If Len(Dir(Filnavn)) Then
    If MsgBox("Overskriv fil?", vbYesNo, Filnavn) = vbNo Then Exit Sub
End If


Prompt for versionsnavn - har man ikke computere til regne den ud ;) Altså - hvis versionsnavn mønstret kan faslæggges som f.eks statusrapport,statusrapport(1),...statusrapport(n):

Dim Filnavn, vernum, ver
Const dExt = ".pdf"
Filnavn = "Uge" & "" & Me!lblUgeFør & "" & "Statusrapport" 'UDEN EXTENSION!
While Len(Dir(Filnavn & ver & dExt))
    vernum = vernum + 1
    ver = "(" & vernum & ")"
Wend
Filnavn = Filnavn & ver & dExt
Avatar billede sigyn Seniormester
10. september 2014 - 09:32 #2
Nu har jeg fået prøvet dine forslag.

Den øverste virker delvist, for den spørger uanset om filen eksisterer eller ej.

Den nederste virker ligeledes kun delvist, for den kommer ikke med nogle udgavenumre eller noget, den skriver bare oven i, ligesom den oprindelige.

Det jeg godt kunne tænke mig, og det er vel egentlig en inputbox, ikke en Msgbox, første gang man gemmer, skal den bare gemme. Anden gang skal den fortælle, at filen eksisterer, og om man vil gemme oven i. Hvis ja, skal den selvfølgelig bare gemme, hvis nej, skal den enten åbne stien ind til filmappen, eller også komme med inputboksen, hvor man til det oprindelige filnavn kunne tilføje f.eks "udgave 2" Hvis man så får brug for en udgave 3 er filen jo igen eksisterende som udgave 2
Avatar billede bvirk Guru
10. september 2014 - 11:23 #3
Nå - det var ikke sådan det skulle virke.

Meningen, i første tilfælde, er at der kun spørges hvis der ikke i forvejen er en fil fra den pågældende uge. Det var mest for at vise hvordan man kunne det at jeg skrev det.

Princippet andet tilfælde er at der dannes et nyt versionsnumer fra serien fil,fil(1),fil(2)...fil(n) automatisk - aner ikke hvorfor det ikke virker hos dig - betragt mit bidrag som inspiration.

Måske andre kan bidrage med det med prompten?
Avatar billede sigyn Seniormester
10. september 2014 - 11:29 #4
Begge ideer er sådan set gode nok, de virker tilsyneladende bare ikke helt efter hensigten når jeg prøver.
For som nævnt spørger den første, uanset om der er en eksisterende fil fra ugen eller ej, og den anden sætter ikke verionsnumre på
Avatar billede bvirk Guru
11. september 2014 - 12:02 #5
Kig på Dir(...)
Mine vba linier er, omend virkende i mit setup,  til illustation i dit setup - det skal omskrives så dir(...) opererer i den rette mappe.
Avatar billede sigyn Seniormester
11. september 2014 - 12:31 #6
Så begynder det at dæmre, men jeg skal alligevel have det præciceret lidt mere (skåret ud i pap), Dir scarer det til stien ? altså noget i rertning af feks Len("Q:\MinSti1\MinSti2\MinSti3\Ugerapporter\2014\Filnavn)?
Avatar billede bvirk Guru
11. september 2014 - 17:36 #7
Et eksempel - hvis "C:\Programmer\7-Zip\readme.txt" er en fil på computeren så vil
  dir("C:\Programmer\7-Zip\readme.txt")
returnere strengen 'readme.txt'

len(str) returnerer lænden af strengen str i antal tegn

Dermed vil len(dir("C:\Programmer\7-Zip\readme.txt")) returnere 10

dir(fil) hvor fil IKKR eksisterer returerer en tom streng - det er en streng hvor længden er 0.

Dermed vil len(dir(fil)) være forskellig fra 0 hvis filen findes - med andre ord - len(dir(...)) bruges som en 'fileksisterer' funktion - et tal forskellig fra 0 som bolsk værdi er i vba true.

Hjælp til de fleste normalt indbyggede ting, kan, i vba editoren, får ved at taste F1 med markøren stående i ordet.
Avatar billede sigyn Seniormester
08. oktober 2014 - 10:20 #8
Jeg har ikke glemt denne, jeg har bare ikke haft tid til at prøve det sidste eksempel af

Jeg vidste godt at len var længde, men dir kendte jeg ikke
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

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



IT-JOB