28. maj 2011 - 08:29Der er
11 kommentarer og 1 løsning
Makro til kontinuerlig autonummerering i Excel 2010
Nedenstående makro tildeler en ordreseddel i Excel 2010 et fortløbende nummer. Det er en standard ordreseddel/skabelon, der åbnes for hver ny ordre. Men hvis ordresedlen af en eller anden grund ikke gemmes, da tæller makroen alligevel op næste gang man opdaterer, så der kommer til at mangle numre i ordrerækken, som jeg gerne vil have til at være kontinuerlig. Kan man sætte en kode ind, så der ikke tælles op, hvis dokumentet ikke gemmes, så der ikke bliver huller i talrækken?
Jeg er ikke VBA-specialist, men har fundet koderne i en gammel tråd i dette forum og blot redigeret lidt i makroen.
Sub Autonummerering() FakFil = "E:\Dokumenter\Excel\Autonummerering.txt" Open FakFil For Input As #1 Line Input #1, GlNr Close #1 Open FakFil For Output As #1 NyNr = Val(GlNr) + 1 Print #1, NyNr Close #1 Range("l6").Value = NyNr End Sub
Du kunne jo vælge at køre denne macro fra en knap, så det er dig der bestemmer hvornår den indsættes, så det ikke foregår automatisk. Det har jeg gjort fra den faktura skabelon jeg har fået hjælp til herinde. Din macro her minder meget om den jeg har. Jeg har også i min faktura skabelon en "gem som" knap der gemmer filen i en bestemt mappe. Du er velkommen til at kigge under min profil for at få inspiration.
jeg ville også køre den i forbindelse med 'gem som', dvs hente nummerering, tælle en op, gemme ark som fx ordre00000x, og sluttelig opdatere nummerering. Så bliver det samlet til
Sub gemsom() ' gemsom Makro - med automatisk tæller
' henter tæller FakFil = "E:\Dokumenter\Excel\Autonummerering.txt" Open FakFil For Input As #1 Line Input #1, GlNr Close #1 ' læg 1 til, og opdater ark NyNr = Val(GlNr) + 1 Range("l6").Value = NyNr ' formatér filnavn til 'E:\Dokumenter\Excel\Ordre00000x.xlsm' gemsom = "E:\Dokumenter\Excel\" & Left("Ordre000000" & Trim(CStr(NyNr)), 11) & ".xlsm" ' gemmer tæller og ark Open FakFil For Output As #1 Print #1, NyNr Close #1 ActiveWorkbook.SaveAs Filename:=gemsom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False End Sub
næstsidste linje er for lang ActiveWorkbook.SaveAs Filename:=gemsom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
lav den om til 2 linjer ved at indsætte en _ (linje fortsættes tegn) ActiveWorkbook.SaveAs Filename:=gemsom, _ FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
min kodelinje virker ikke gemsom = "E:\Dokumenter\Excel\" & Left("Ordre000000" & Trim(CStr(NyNr)), 11) & ".xlsm" den skal laves om, så ordrenummer læses korrekt - ellers kommer ordrenummer ikke med i filnavnet (de vil pt alle blive til Ordre000000)
forskellen ligger i , at før havde jeg ordre0000001 og tog de 11 tegn fra venstre - i den nye har jeg 'ordre' + 0000001 og tager de sidste 6 tegn, dvs ordre + 000001, som giver filnavnet ordre000001
Koden ser nu således ud med dine rettelser claes57:
Sub gemsom() ' gemsom Makro - med automatisk tæller
' henter tæller FakFil = "E:\Dokumenter\Excel\Autonummerering.txt" Open FakFil For Input As #1 Line Input #1, GlNr Close #1 ' læg 1 til, og opdater ark NyNr = Val(GlNr) + 1 Range("l6").Value = NyNr ' formatér filnavn til 'E:\Dokumenter\Excel\Ordre00000x.xlsm' gemsom = "E:\Dokumenter\Excel\Ordre" & Right("000000" & Trim(CStr(NyNr)), 6) & ".xlsm" ' gemmer tæller og ark Open FakFil For Output As #1 Print #1, NyNr Close #1 ActiveWorkbook.SaveAs Filename:=gemsom, _ FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Når jeg aktiverer gemsom-makroen i ordre 00000x.xlsm, får jeg enten følgende besked: Compile error: Expected function or variable - eller denne: Can't execute in break mode.
1. linie - Sub gemsom() - er markeret med gult i VBA.
jeg har lavet deet i excel 2007 versionen - ved ikke, om det betyder noget? tjek lige, at filen E:\Dokumenter\Excel\Autonummerering.txt findes på din maskine
ellers er det måske, at jeg har eb variabel med samme navn som makroen - så ret gemsom de 2 steder markeret nedenfor til fx NyNavn
' formatér filnavn til 'E:\Dokumenter\Excel\Ordre00000x.xlsm' gemsom = "E:\Dokumenter\Excel\Ordre" & Right("000000" & Trim(CStr(NyNr)), 6) & ".xlsm" ' gemmer tæller og ark Open FakFil For Output As #1 Print #1, NyNr Close #1 ActiveWorkbook.SaveAs Filename:=gemsom, _ FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Perfekt! Nu virker det :-) gemsom blev erstattet med NyNavn ... Tusind tak claes57.
Excel-versionen tror jeg ikke har betydning - den første macro jeg fandt herinde, som virkede bortset fra opsummeringen, var et svar fra 2002, så der er nok ikke sket så meget kodemæssigt hvad det angår.
Men nu vil jeg så gerne tildele makroen i celle l6 en knap som 220661 foreslår, så jeg ikke skal hente den manuelt. Jeg indsætter en figur i cellen og tildeler den en makro. Kan knappen have samme navn som makroen - altså gemsom? En genvejstast er selvfølgelig også en mulighed.
Til sidst - nogen gode forslag til sider, hvor man kan lære mere om makro-opbygning/sprog?
Øv - hvorfor har jeg altid problemer med pointgivningen. Det synes ulogisk hver eneste gang .... Vil du lægge et svar claes57, som jeg kan acceptere og pointgive? Håber ikke det er for sent.
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.