Avatar billede jnoval Nybegynder
08. november 2003 - 10:47 Der er 8 kommentarer og
2 løsninger

Starte excel macro hver gang der kommer en ny fil i in-folder

Jeg har en in-folder hvor der kommer en del data filer i txt format. Dataerne er EAN13 koder. En kode på hver linie. Koderne kan være flere ens, men også forskellige. Dem skal jeg opsamle i en excel fil. Et fil for hver txt fil.  I excel skal der laves en optælling af ens EAN koder, indsættes en dato, formatere celler til nummer (heltal). Excel filen skal gemmes i en out-folder. Den oprindelige txt-fil i in-folderen skal slettes.
Jeg kunne godt tænke mig et script der kører i baggrunden, når der kommer nye filer i in-folderen så startes excel og macroen laver sit arbejde.derefter skal excel lukkes igen.

Det jeg har nu er:
En macro i excel der åbner en navngiven txt fil (den jeg optag macroen til), markerer celle A1, laver en sammentælling v.h.a. VB, indsætter dato (now() ), formatterer celler, og gemmer i out folder i xls format.

Jeg er stødt ind i følgende problemer:
1. Starte excel og macro når fil kommer i in-folder
2. Macro ser kun efter file med navn data.txt
3. Macro gemmer altid i out-folder med navn data.xls
4. Den oprindelige fil i in-folder skal slettes

Hvis punkt 1 volde problemer kan jeg evt. lave en scheduled task der kører hver 1/2 time, men jeg ønsker ingen fejlmeddelser hvis in-folderen er tom.

Desuden mangler jeg at EAN nr i sammentællingen skal slås op i en acces database, for at hente en varebeskrivelse. Det vil jeg tro kan gøres v.h.a. ODBC
Avatar billede bak Forsker
08. november 2003 - 11:57 #1
Dette skulle kunne klare 2, 3 og 4
1. chekker en folder for txt filer. åbner dem alle en for en.
2. Gemmer som xl-fil som dato og klokkeslet
3. sletter textfilene igen en for en

Private Sub ListFiles()
    Dim InDirectory As String, OutDirectory As String
    Dim i As Long
    InDirectory = "c:\textfiler"
    OutDirectory = "c:\xlfiler\"
    On Error Resume Next
    With Application.FileSearch
        .NewSearch
        .LookIn = InDirectory
        .Filename = "*.txt"
        .SearchSubFolders = False
        .Execute
        If Not .FoundFiles.Count > 0 Then Exit Sub
        ReDim filer(.FoundFiles.Count)
        For i = 1 To .FoundFiles.Count
            Workbooks.OpenText .FoundFiles(i)
            Call myOwnMacro 'her indsætter du et kald til dim egen makro
            ActiveWorkbook.SaveAs Filename:=OutDirectory & Format(Now, "ddmmyy-hhmm"), FileFormat:=xlNormal
            Kill .FoundFiles(i)
        Next i
    End With
End Sub
Avatar billede jkrons Professor
08. november 2003 - 13:14 #2
Det første spørgsmål kan ikke laves inde fra Excel. En makro, der kører i Excel kan ikke startes før Excel er startet, og kan altså ikke starte Excel. Derfor er du nok nødt til at programmere en exe-fil,  som checker din mappe for nye filer og i givet fald starter Excel og afspiller makroen. Men denne Exe fil skal til gengæld køre  (være åben) hele tiden ellefr starte automatisk med meget jævne mellemrum, for se om der er kommet nye filer.

Her må du ug og have fat i et programmeringsværktøj.
Avatar billede stefanfuglsang Juniormester
08. november 2003 - 16:45 #3
Jeg tror dette program kan starte Excel automatisk ved f.eks. ny fil i en mappe
http://download.com.com/3000-2094-10115845.html?tag=lst-0-8

Schedule 3.5.31 
Operations can be scheduled to launch
  based on a flexible range of dates and times
when file or directory changes occur
when windows or programs open or close
when Schedule is started

demo version, shareware koster 50$
Avatar billede stefanfuglsang Juniormester
08. november 2003 - 16:53 #4
... Men hvad med at have Excel åben og checke hvert 10. sekund for filer:

i ThisWorkBook:

Const UpdateTime = TimeValue("00:00:10")
Private Sub Workbook_Open()
    Application.OnTime Now + UpdateTime, "CheckForFile"
End Sub

Sub CheckForFile()
    ListFiles 'eller hvad der nu skal laves hvert 10. sekund.
    Application.OnTime Now + UpdateTime, "CheckForFile"
End Sub
Avatar billede jnoval Nybegynder
08. november 2003 - 16:58 #5
Bak > Det ser fint ud. Jeg var nødt til at ændre i filnavnet på outfilen, da det går så hurtigt at den kan generere mere end en fil på minut. Jeg har derfor tilføjet sekunder.
txt filerne lukke ikke. Jeg har prtøvet med:
ActiveWindow.Close
men så spørger den om ændringer skal gemmes. Det skal de jo ikke. Man hvordan for jeg dette med i makroen.
Hvordan tilføjer jeg in filnavn til out filnavn?
Bak smid et svar
Avatar billede jnoval Nybegynder
08. november 2003 - 17:04 #6
Jeg er klar over at jeg ikke kan starte excel fra en excel macro. Men det må være muligt at starte excel og aktivere en makro fra et vbs script i windows 2000. Ja jeg fik ikke fortalt at det kører på win2000.
Kan man lukke excel fra en excel makro?
Selvfølgelig er der muligheden for at have excel åben, men lad os se om det andet ikke er muligt.
Avatar billede bak Forsker
08. november 2003 - 17:59 #7
Et par modifikationer:
gemmer som textfil-navnet + datotid
lukker filerne efter sig
lukker excel som afslutning

Sub ListFiles()
    Dim InDirectory As String, OutDirectory As String
    Dim i As Long, x As Variant, FilNavn As String
    InDirectory = "c:\"
    OutDirectory = "c:\"
    On Error Resume Next
    With Application.FileSearch
        .NewSearch
        .LookIn = InDirectory
        .Filename = "*.txt"
        .SearchSubFolders = False
        .Execute
        If Not .FoundFiles.Count > 0 Then Exit Sub
        ReDim filer(.FoundFiles.Count)
        For i = 1 To .FoundFiles.Count
            Workbooks.OpenText (.FoundFiles(i))
            x = Split(.FoundFiles(i), "\")
            FilNavn = Left(x(UBound(x)), InStr(1, UCase(x(UBound(x))), ".TXT") - 1)
            Call myOwnMacro 'her indsætter du et kald til dim egen makro
            ActiveWorkbook.SaveAs Filename:=OutDirectory & FilNavn & Format(Now, "ddmmyy-hhmmss"), FileFormat:=xlNormal
            ActiveWorkbook.Close savechanges:=False
            Kill .FoundFiles(i)
        Next i
    End With
Application.Quit  ' Lukker excel efter brug
End Sub
Avatar billede jnoval Nybegynder
08. november 2003 - 19:07 #8
Så fungerer det. Tilbage er kun at få det til at køre uden excel er åben. Det kan være jeg benytter stefanfuglsang's forslag med at køre med excel åben. Derfor får han også nogle point
Avatar billede bak Forsker
10. november 2003 - 08:23 #9
hvis du har windows 2000 eller højere, så kan den indbyggede Planlægningagent bruges til at starte en "task" fx. hver 20 min. Denne "task" kan sagtens være at åbne et bestemt excelark.
På engelsk "Scheduled tasks".
Avatar billede jnoval Nybegynder
10. november 2003 - 18:58 #10
Det var jeg ikke klar over. Tak for det.
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
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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