Avatar billede Alkaersig Nybegynder
07. december 2011 - 16:16 Der er 12 kommentarer og
1 løsning

Kedeligt manuelt arbejde

På min arbejdsplads laver vi en kasseopgørelse for hver dag, da den skal sendes pr. mail hver aften. Nu skal vi til at lave det for 2012 så alle filerne til hele året er klar - Er der nogen smart måde at gøre det, så den "automatisk" laver filerne for et helt år, så de også har de rigtige navne (og den rigtige dato står inde i regnearket som passer til filnavnet?) i stedet for det kedelige manuelle arbejde?

Fx.
      Kasseopgørelse-010112.xls
      Kasseopgørelse-020112.xls
      Osv.

Vh
Alkærsig
Avatar billede supertekst Ekspert
07. december 2011 - 16:39 #1
Ja det kan nok lade sig gøre via VBA (makroer). Har i andet system koden til at generere alle dage i et hvilket som helst år.

- Alle dag -
- Eksl. weekend
- - helligdage
eller??

og så velkommen til Eksperten..
Avatar billede claes57 Ekspert
07. december 2011 - 17:05 #2
og i filnavnet skal du altid have datoen vendt på usa-måde, så det er år/md/dag - så kommer den i rækkefølge.

Med dag/md/år vil 1. feb komme lige efter 1. jan, og 2. jan vil først komme efter 1. dec.
Avatar billede Alkaersig Nybegynder
07. december 2011 - 17:45 #3
Nej jeg har slet ingen systemer til at lave det. Sidste år sad min chef og gjorde det nemlig - og nu har jeg fået tjansen i år, så jeg tænkte der måtte være en lettere måde. (Ja selvfølgelig til det med datoerne, min fejl) :)
Avatar billede claes57 Ekspert
07. december 2011 - 18:58 #4
er det det samme ark, der skal kopieres ud i datoer? Og hvad var det med weekend?
Avatar billede Alkaersig Nybegynder
07. december 2011 - 19:31 #5
Ja det er samme ark som skal kopieres ud i alle årets dage (365 stk). Det ark som er "masteren" skal altså kopieres i 365 stk som hedder som ovenstående. Det eneste som skal ændre sig når de kopieres er navnet på filen og datoen som står inde i filen.
Avatar billede sophus.00 Nybegynder
07. december 2011 - 21:13 #6
Indsæt følgende kode i et VBA modul

Function opgDato()
    opgDato = Mid(ActiveWorkbook.Name, 16, 10)
End Function
Sub Gem2012()
    Dim dato As Date
    Dim placering As String
    Dim i, d, m, y As Integer
    dato = "01-01-2012"
    placering = "C:\Documents and Settings\Administrator\Skrivebord\Kasseopgørelser\"
    For i = 1 To 365
        dato = DateAdd("d", 1, dato)
        d = Left(dato, 2)
        m = Mid(dato, 4, 2)
        y = Right(dato, 4)
        ActiveWorkbook.SaveAs placering & "Kasseopgørelse " & y & "-" & m & "-" & d & ".xls"
    Next
End Sub

Vær opmærksom på følgende!

I den celle i dit ark hvor den aktuelle dato skal stå skal du indtaste formlen =opgDato()
Funktionen er blevet oprettet med ovenstående kode, og bemærk at det ikke vil virke hvis du omdøber filnavnet!

Linien der starter med placering = "C:\...\" skal du ændre til den fulde sti til den mappe hvori kasseopgørelserne skal placeres. Det er VIGTIGT at du afslutter med \

"Master" arket gemmer du med følgende filnavn "Kasseopgørelse 2012-01-01.xls" i den mappe du gerne vil have kasseopgørelserne i.

Koden er lavet til et ark i Excel 97-2003 format.
Avatar billede Alkaersig Nybegynder
07. december 2011 - 23:00 #7
Mange tak. Hvordan gør jeg så når jeg skal lave kasseopgørelse for næste år igen (2013?), når filnavnet skulle være "Kasseopgørelse 2012-01-01?"
Avatar billede sophus.00 Nybegynder
07. december 2011 - 23:22 #8
Næste år ændrer du følgende linie i koden
dato = "01-01-2012"
til
dato = "01-01-2013"
og gemmer filen som "Kasseopgørelse 2013-01-01", før du kører makroen!
Avatar billede Alkaersig Nybegynder
07. december 2011 - 23:26 #9
Kan dette også bruges til excel 2007 eller skal jeg finde de gamle cd'er frem? :)
Avatar billede sophus.00 Nybegynder
07. december 2011 - 23:57 #10
Koden kan sagtens bruges i Excel 2007 (det er den version jeg har testet ovenstående i). Så skal du blot gemme masteren i 2007 format (.xlsx) og ændre der i koden hvor der står ".xls" til ".xlsx"
Avatar billede aerobyte Nybegynder
08. december 2011 - 01:39 #11
Har lige tilladt mig at skrive den en smule om, så den rent faktisk skriver datoen i regnearket - og arket gemmes uden makroer (hvis det gemmes som .xlsx med makroer kommer der en sikkerhedsadvarsel hver gang dokumentet åbnes).


Sub Gem2012()
    Dim dato As Date
    Dim placering, filename As String
    Dim i, d, m, y As Integer
    dato = "31-12-2011"
    placering = "c:\mappe"
    Workbooks.Open ("c:\master.xlsx")
    For i = 1 To 365
        dato = DateAdd("d", 1, dato)
        Worksheets("Ark1").Range("A1").Value = dato
        d = Left(dato, 2)
        m = Mid(dato, 4, 2)
        y = Right(dato, 4)
        filename = "Kasseopgørelse " & y & "-" & m & "-" & d & ".xlsx"
        ActiveWorkbook.SaveCopyAs placering & filename
    Next
End Sub


Kopier koden ind i et nyt VBA modul og erstat c:\mappe\ med stien hvor opgørelserne skal gemmes og erstat c:\master.xlsx med stien på "originalen/masteren".

Erstat desuden Ark1 med navnet arket (inde i regnearket) samt A1 med cellen som datoen skal skrives i.
Avatar billede finb Ekspert
08. december 2011 - 11:03 #12
Tal pænt og husk formålet er at hjælpe spørgeren (også selvom de ikke altid er så gode til at lytte).

Dette indlæg er blevet modereret af en CoAdmin

Avatar billede Alkaersig Nybegynder
23. december 2011 - 01:10 #13
Mange tak for hjælpen forresten.
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