Avatar billede munkholm_nielsen Nybegynder
28. maj 2011 - 08:29 Der 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
Avatar billede 220661 Ekspert
28. maj 2011 - 08:38 #1
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.
Avatar billede claes57 Ekspert
28. maj 2011 - 09:09 #2
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
Avatar billede claes57 Ekspert
28. maj 2011 - 09:11 #3
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
Avatar billede munkholm_nielsen Nybegynder
28. maj 2011 - 18:37 #4
Tusind tak for jeres forslag. Prøver lige at eksperimentere lidt med begge dele og vender tilbage.

/Susanne
Avatar billede claes57 Ekspert
28. maj 2011 - 20:17 #5
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)

gemsom = "E:\Dokumenter\Excel\Ordre" & Right("000000" & Trim(CStr(NyNr)),6) & ".xlsm"

så kan den tælle op til ordre # 999.999

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
Avatar billede munkholm_nielsen Nybegynder
29. maj 2011 - 08:41 #6
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.

Hvad kan det mon skyldes?

/Susanne
Avatar billede claes57 Ekspert
29. maj 2011 - 10:07 #7
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
Avatar billede munkholm_nielsen Nybegynder
29. maj 2011 - 16:49 #8
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?


/Susanne
Avatar billede claes57 Ekspert
29. maj 2011 - 17:21 #9
makroen skriver faktisk ordrenummer i I6
Range("l6").Value = NyNr
så læg en knap et andet sted.

Makroer er noget miskmask - dels ting, der er specifikt for excel, og dels alm vbs.
Det kan du læse mere om på fx http://excelvbatutor.com/
Avatar billede munkholm_nielsen Nybegynder
29. maj 2011 - 20:51 #10
Ok ... Tak for hurtige og konstruktive svar, hjælp og link oven i købet.

Jeg lukker tråden her.


/Susanne
Avatar billede munkholm_nielsen Nybegynder
29. maj 2011 - 20:57 #11
Ø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.

/Susanne
Avatar billede claes57 Ekspert
30. maj 2011 - 09:36 #12
ok...
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

Cognizant Technology Solutions Denmark ApS

Senior Test Engineer

Cognizant Technology Solutions Denmark ApS

SAP Project Manager

Sindico Group A/S

Business Central Specialist

JP/Politikens Hus

Netværksadministrator

Netcompany A/S

Test Specialist