03. maj 2005 - 05:20Der er
43 kommentarer og 2 løsninger
Automatisk nummer
Jeg har lavet en simpel faktura skabelon i excel, men jeg kan ikke findeud af hvordan jeg får min skabelon, til at autogenerere et nyt fortløbende faktura nummer, for vergang jeg starter skabelonen op.
Kan det lade sig gøre, og hvis det kan hvordan.
skabelonen findes her http.//rex.homeftp.org/Fak.XLT
På selve fanebladet "Faktura" højreklikker du og vælger "Vis programkode". I venstre side af skærmbilledet dobbeltklikker du så på "ThisWorkBook", og i det hvide område indsætter du nedenstående.
Private Sub Workbook_Open()
Worksheets("Faktura").Range("H13") = Worksheets("Faktura").Range("H13") + 1 ActiveWorkbook.Save Do fName = Application.GetSaveAsFilename Loop Until fName <> False ActiveWorkbook.SaveAs FileName:=fName
End Sub
Når du åbner arket, vil programmet lægge en til fakturanummeret og gemme arket (så arket gemmet det nyeste fakturanummer).
Derefter laves en SaveAs (gem som) så du ikke gemmer den nye faktura oven i masteren. Det kan du selvfølgelig bare fjerne, hvis du ikke har brug for det.
Jeg kan ikke få det til at virke. Jeg har lagt koden ind i skabelonen, og efter athavedeaktiveret macro sikkerheden, lavede jeg en hurtig test fak. Men der blev ikke oprettet +1 nogle steder.
Kan man få excel til at hente fak nr. fra bib. jeg havde tiltænkt at fak. sættes til at gemme i spec. bib. Eller lave en lille fil der holder styr på fak nr. Og helt perf. hvis man kan få den til at gemme som fak nr eks. Fak0001.xls
Jeg gør måske noget forkert. Jeg bruger samme fil, som jeg har lagt på server. Jeg højre klikkede, og pastede koden. Gemte skabelonen. klikkede på skabelonen, så den åbnede et nyt dokument udfyldte med fak. nr. mm. gemte som fak0001, startede igen skabelonen, men der intet sker :-(
Hvad gør jeg galt ?
Evt. hvis du vil sende den du har rettet til, så kan jeg måske se hvad jeg gør galt.
Hmm. når jeg starter skabelonen førstegang, gemmer den 2 filer en fak1.xls og fak0001.xls, når jeg så starter skabelonen andengang spørger den om at over skrive begge filer :-(. Er det mig der gør nogetgalt, eller skal man ikke bruge skabelon, men fak1.xls.
Sidst men ikke mindst, kan jeg undgå at når jeg åbner en gemt fak. at den ligger +1 til fak. nummeret ? mere det er jo meget rart at kan kan gå baglæns i sine faktura og kigge uden at den opretter en ny fak. Jeg tænker her om man kan lave det så det kun er Masteren der har macro og ikke selve fakturane ?
Jeg prøver at få macroen til at sætte 000 foran fak nr. men den her kode virker ikke :( Worksheets("Faktura").Range("H13") = Worksheets("Faktura").Range("H13"), "000") + 1 Er der en anden måde at gøre det på ?
Bemærk lige at i den sidste ændring skal du angive et StiNavn for hvor filerne skal placeres. Det bliver så kontrolleret om den nye fil findes. Hvis den gør lukkes programmet ned. Så kan man jo prøve igen - uanset denne fejl bliver fakturanummeret øget med 1 hver gang makroen kører.
Det hjalp ;) Kan få den til at "slette" makroen i xls filerne, så ikke at der bliver lagt +1 til når man åbner allerede skrevet fak's ? Og hvordan får jeg passet det at der kommer til at stå 0001 i stedet for 1 i fak ner.
Beklager at jeg er så besværlig, men jeg fatter - af vb/macro
Nedenstående skulle sørge for at alt det der kopiering og nummerering kun sker når Fak.xlt åbnes (hvis du bruger et andet navn, skal du lige huske at ændre det):
Private Sub Workbook_Open()
If ActiveWorkbook.Name = "Fak.xlt" Then Worksheets("Faktura").Range("H13") = Worksheets("Faktura").Range("H13") + 1
Yes mange mange mange takker, du fortjener en kold ØL. Bare sig til og jeg sender dig 1-2 stks. humle som tak for hjælpen.
Har lige en lille ting ekstra. Kan man lave sp der automatisk bliver indsat dags dato i dato feltet. Samt indsat dagsdato + 15 i betales senest feltet.
Aktuel dato i celle H12 Aktuel dato + 15 dage i celle H17
Husk at formatere cellerne til datoformat (H12 er p.t. formateret til tekst, og H17 skal du nok flette med I17 for at kunne se datoen).
Jeg har lavet en lille ekstra detalje, der sikrer, at "Betales senest" ikke falder på en lørdag eller søndag - der tages dog ikke højde for helligdage, det må du gøre manuelt.
Bare sig til, så mailer jeg mit ark.
Private Sub Workbook_Open()
If ActiveWorkbook.Name = "Fak1" Then Worksheets("Faktura").Range("H13") = Worksheets("Faktura").Range("H13") + 1
Dammed det er bare lækkert, det her jeg har savnet den funktion i 100 år og en madpakke, og hvis du kan hekse den med datoen/betalings datoen også, jammen så er hele min måned redet :-) Hvis du vil have flere point, så opretter jeg bare et nyt Q.
Jeg har neglet en norsk funktion, der kan beregne om datoer er helligdage (fra http://www.erlandsendata.no/english/index.php?d=enfunctionsdateholidays). Jeg har fordansket funktionen lidt, og tilpasset On-Open makroen. Så nu skulle du også kunne undgå at angive en helligdag som sidste frist - Det er dog altid at kontrollere og ikke stole blindt på den slags - der kan jo have sneget sig en fejl ind.
Function ErHelligdag(testDato As Long, InclLørdage As Boolean, InclSøndage As Boolean) As Boolean Dim InputYear As Integer, PD As Long, OK As Boolean If testDato <= 0 Then testDato = Date InputYear = Year(testDato) PD = Påskedag(InputYear) OK = True Select Case testDato Case DateSerial(InputYear, 1, 1) ' Nytårsdag Case PD - 7 ' Palmesøndag Case PD - 3 ' Skærtorsdag Case PD - 2 ' Langfredag Case PD ' Påskedag Case PD + 1 ' 2. påskedag Case PD + 26 ' St. Bededag Case PD + 39 ' Kristi Himmelfartsdag Case PD + 49 ' Pinsedag Case PD + 50 ' 2. Pinsedag Case DateSerial(InputYear, 12, 24) ' Juleaftensdag Case DateSerial(InputYear, 12, 25) ' Juledag Case DateSerial(InputYear, 12, 26) ' 2. Juledag Case DateSerial(InputYear, 12, 31) ' Nytårsaftensdag Case Else OK = False If InclLørdage Then If WeekDay(testDato, vbMonday) = 6 Then OK = True End If End If If InclSøndage Then If WeekDay(testDato, vbMonday) = 7 Then OK = True End If End If End Select IsHoliday = OK End Function
Function Påskedag(InputYear As Integer) As Long Dim d As Integer d = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) + 21 Påskedag = DateSerial(InputYear, 3, 1) + d + (d > 48) + 6 - ((InputYear + InputYear \ 4 + d + (d > 48) + 1) Mod 7) End Function
Sender lige arket så du ikke skal bøvle med kopieringen ;0)
Om du synes, der skal gives ekstra point vil jeg lade være op til dig. Jeg har jo fået de point du har stillet i udsigt, og så er jeg sådan set tilfreds.
Du lyder til at være kanon flink, Sjap, kunne jeg ikke også få fakturaen. Jeg har bøvlet med koderne hér, men får de samme fejl! Chris.Sogaard@gmail.com
Det kan godt være at det er mig der er idiot, men fakturaen virker ikke hos mig. Den har de samme problemer som dem kancaie har været igennem. Jeg har tilladt makroer, en mappe på c:\faktura\ , osv osv, men den gennerer hverken et nyt nummer, eller en ny faktura. Jeg åbner kun skabelonen hver gang. Er jeg bara en analfabet eller ...?
OK. Efter at have rodet lidt med det fik jeg den til at virke. Men nu har jeg jo genneret faktura 0522-0001. Næste gang jeg åbner skabelonen, siger den så at der allerede er en faktura med nummeret 0522-0001, og programmet afsluttes. Det skal den jo også gøre, men hvordan hulken får man så skabelonen til at lave det næste nummer? Gemmer man skabelonen for hver gang eller?
og INDEN den gemmes, er fakturanummeret blevet opdateret.
Der er ikke nogen specifikation af hvor templaten skal gemmes, så den gemmes blot i den mappe du har åbnet sidst (fra Excel). Hvis du bruger menuen Filer/åbn i Excel, så er det den mappe som templaten ligger i, men hvis du f.eks. dobbeltklikker på templaten i Stifinder, så er det ikke sikkert, at det er den rigtige mappe.
Mit gæt er at du har en ekstra template liggende på din PC - formodentligt i mappen dokumenter - og denne template vil virke!
Det er godt nok en gammel tråd men den har hjulpet mig en del, men nu sidder jeg sku fast...!
Jeg har lavet et excel ark som en "master" (xls-fil). Når jeg åbner arket, gemmer den som en ny og kalder arket for faktura 0002. Men når jeg åbner masteren igen, skriver den at faktura 0002 allerede eksistere. Dvs. den gemmer den ikke som en ny fil og kalder den 0003. Det gør den kun hvis jeg åbner faktura 0002.
Nogen der kan hitte ud hvad jeg gør forkert?
Her er min kode:
Private Sub Workbook_Open()
If ActiveWorkbook.Name = "Quotation_Fomular.xls" Then Worksheets("Motor Quotation").Range("B5") = Worksheets("Motor Quotation").Range("B5") + 1
Men prøv at oprette et nyt Q. der må være nogle der ved hvorfor det ikke virker mere...
Det kunne jo også være en Xp opdatering der driller.
Beklager at jeg ikke kan hjælpe.
/Rex
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.