Avatar billede madiedk Nybegynder
17. juli 2008 - 23:48 Der er 10 kommentarer og
1 løsning

vba kode til at scanne mappe for filnavne

Hej

jeg har en vba knap som der gemmer indholdet af et excel ark i en ny excelfil som den opretter og gemmer i en mappe på harddisken.
jeg har sat navnet af filen til at være dagsdato. så hvis jeg klikker på knappen 2 gange så siger den anden gang at en fil med det navn allerede eksisterer. jeg kunne godt tænkte mig at der så ville skriver f.eks. 17-07-2008_2 som navn ved anden fil den dag og 17-07-2008_3 ved tredje fil den dag osv. men hvordan gør jeg det? jeg skal ved scanne mappen som filerne bliver gemt i for at se om der allerede er en fil med den dato?

hvis der er nogle der kan/vil skriver hele koden vil jeg være meget taknemlig. da den kode jeg har nu er optaget med en makro og er lidt langsom.
Avatar billede supertekst Ekspert
18. juli 2008 - 09:09 #1
Et alternativ kunne være at gemme filerne med dato + klokkeslet - dog skal kolon i dette fjernes (: må ikke anvendes i filnavn).

Hvis du skal have skrevet koden om, så kunne du jo vise, hvordan den bestående ser ud.
Avatar billede kabbak Professor
18. juli 2008 - 10:26 #2
Public Sub NytArk()
    Dim Navn As String
    Worksheets.Add
    Navn = Date
    i = 1
    If Not EksistererArk(Navn) Then
        ActiveSheet.Name = Navn
    Else
        Do
            i = i + 1
            Navn = Date & "_" & i
        Loop Until Not EksistererArk(Navn)
        ActiveSheet.Name = Navn
    End If
End Sub

Public Function EksistererArk(nyNavn) As Boolean
    For Each ark In Worksheets
        If ark.Name = nyNavn Then
            EksistererArk = True
        End If
    Next
End Function
Avatar billede kabbak Professor
18. juli 2008 - 10:31 #3
lige en tilføjelse, så den er hurtigere

Public Function EksistererArk(nyNavn) As Boolean
EksistererArk = False
    For Each ark In Worksheets
        If ark.Name = nyNavn Then
            EksistererArk = True
            exit function
        End If
    Next
End Function
Avatar billede madiedk Nybegynder
18. juli 2008 - 10:47 #4
jeg har vidst ik forklaret mig helt tydeligt.

det er ik på arkbasis men på filbasis.
Det vil sige at hvert ark ligger i en seperat fil, og det er filen der har "dato navnet" så det er mappen man skan scanne igennem og læse filnavne på de filerne der ligger der for at se om der er nogle med samme navn og hvis der er så skal filen slutte og 2,3,4 osv.
Avatar billede excelent Ekspert
18. juli 2008 - 10:51 #5
Sub FNavn()

sti = "c:\Users\pm\Desktop\" ' Ret stinavn til aktuel
nr = 1
First = True
Do While (1)
   
If First = True Then
FilNavn = Dir(sti + "\*.xls")
First = False
Else
FilNavn = Dir
End If
     
If FilNavn = "" Then Exit Do
     
If Left(FilNavn, 10) Like Date Then
nr = nr + 1
End If

Loop

ThisWorkbook.SaveCopyAs sti & Date & "_" & nr & ".xls"

End Sub
Avatar billede madiedk Nybegynder
18. juli 2008 - 11:27 #6
tak for koden, men nu har jeg ik prøvet koden endnu, men umiddelbart ser jeg lidt problemer.

Da excelfilen hvor man trykker på knappen ligger på et netværksdrev og der er mange brugere på netværket der bruger den, også samtidig. og brugerne åbner filen trykker på knappen og lukker excel ned igen og åbner det måske sidst på dagen og trykke på knappen igen. er der taget højde for det i koden?

det er samme mappe på netværksdrevet som kopi af excelarkene/filerne bliver gemt i, bare til info.
Avatar billede excelent Ekspert
18. juli 2008 - 12:19 #7
umiddelbart tror jeg ikke det skaber problemer - men er ikke 100%
Når koden køres, skannes mappen for filer der starter med dags dato
variablen nr tæller antal som matcher og tilføjes filnavn
Avatar billede madiedk Nybegynder
18. juli 2008 - 12:52 #8
sådan ser den originale kode ud, hjælper det?

det skal lige siges at Hensættelser.TextBox169.Text indeholder dagsdato fra en anden funktion.


Public Sub GemKopiAfBilag()

On Error GoTo fejl
Dim elektroniskBilagsfil As String

    elektroniskBilagsfil = Hensættelser.TextBox169.Text

    Call OpretBilagIExcel


    Sheets("bilag").Select
    Sheets("bilag").Copy
    ActiveWorkbook.SaveAs Filename:= _
        "Q:\1_NPA_enheder\RR\Bilagshistorik\" + elektroniskBilagsfil + ".xls", FileFormat:=xlNormal, _
        Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=False
    ActiveWindow.Close
    Sheets("Programstart").Select

Exit Sub



fejl:
MsgBox "Fejl, ændre eventuelt filnavn,"

End Sub
Avatar billede kabbak Professor
18. juli 2008 - 13:03 #9
Public Sub GemKopiAfBilag()

  ' On Error GoTo fejl
    Dim elektroniskBilagsfil As String

    elektroniskBilagsfil = Hensættelser.TextBox169.Text
 
      Call OpretBilagIExcel


    Sheets("bilag").Select
    Sheets("bilag").Copy
   
    Do Until Dir("Q:\1_NPA_enheder\RR\Bilagshistorik\" + elektroniskBilagsfil + ".xls") = ""
        x = x + 1
        elektroniskBilagsfil = Hensættelser.TextBox169.Text & "_" & x
    Loop
   
    ActiveWorkbook.SaveAs Filename:= _
                          "Q:\1_NPA_enheder\RR\Bilagshistorik\" + elektroniskBilagsfil + ".xls", FileFormat:=xlNormal, _
                          Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
                          CreateBackup:=False
    ActiveWindow.Close
    Sheets("Programstart").Select
   
MsgBox "gemt som, " + elektroniskBilagsfil + ".xls"

    Exit Sub


End Sub
Avatar billede madiedk Nybegynder
18. juli 2008 - 15:16 #10
den virker sku kabbak, skide fedt. tak. svar så der point
Avatar billede kabbak Professor
18. juli 2008 - 15:25 #11
et svar ;-))
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