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.
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
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
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.
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å
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.
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)?
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.
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
Synes godt om
Ny brugerNybegynder
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.