Avatar billede depet Novice
15. maj 2016 - 21:25 Der er 8 kommentarer og
1 løsning

Ændre fil navne

Hej Eksperter

Jeg er ret ny til C#, og ønsker lidt hjælp til følgende:

- Jeg har en Excel listet op med navne i kolonne A
- Jeg har en mappe med en række pdf'er

Ønsket er at pdf'erne skal ændre navn fra nuværende til det navn der står i Excel. Første PDF (i mappen er sorteret efter ændrings dato) skal hedde navnet fra Excel "A1"

Håber på i kan hjælpe mig :)
Avatar billede supertekst Ekspert
17. maj 2016 - 15:52 #1
og det skal være i C# og ikke i VBA?
Avatar billede depet Novice
19. maj 2016 - 06:47 #2
VBA vil også fungere :)
Det kender jeg også en del bedre.
Avatar billede supertekst Ekspert
19. maj 2016 - 10:47 #3
(i mappen er sorteret efter ændrings dato) - stigende eller faldende?
Avatar billede depet Novice
19. maj 2016 - 11:57 #4
Ja de er sorteret efter dato således den den ældste er øverst. På den måde passer det med den første celle i Excel.
Avatar billede supertekst Ekspert
19. maj 2016 - 12:18 #5
Fint - det havde jeg også regnet med.
Sådan ser VBA-koden ud, som jeg i min udgave har placeret under Ark 1. Anvender Ark2 til at udføre sortering ifl. ændringsdato

Option Explicit

Const mappeMedPdfNavn = "Arkiv"                    '<<< ------- kan ajourføres
Dim mappeNavn As String
Dim fs, f, fc, antalFiler As Integer, ræk As Integer

Dim antalRækker As Integer
Public Sub renamePDF()
    houseKeeping
    traverserPdfMappe
End Sub
Private Sub houseKeeping()
    antalRækker = Cells(Rows.Count, "A").End(xlUp).Row
    mappeNavn = ActiveWorkbook.Path & "\" & mappeMedPdfNavn
End Sub
Private Sub traverserPdfMappe()
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(mappeNavn)
    antalFiler = f.Files.Count
    ræk = 1

Rem Opbyg data til sortering, slet først gl. data
    ActiveWorkbook.Sheets(2).Select
    Selection.ClearContents
   
    For Each fc In f.Files
        With ActiveWorkbook.Sheets(2)
            .Range("A" & ræk) = fc.Name
            .Range("B" & ræk) = fc.datelastmodified
        End With
        ræk = ræk + 1
    Next fc
   
    sorterPdfEfterÆndringsdato
   
    renameFiler
   
    MsgBox antalFiler & " FilNavne ændret"
End Sub
Private Sub sorterPdfEfterÆndringsdato()
    ActiveWorkbook.Worksheets("Ark2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Ark2").Sort.SortFields.Add Key:=Range("B1:B" & antalRækker), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Ark2").Sort
        .SetRange Range("A1:B" & antalRækker)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Private Sub renameFiler()
Dim ræk As Integer, ptFilnavn As String, nytFilnavn As String
Dim oldName As String, newName As String
    For ræk = 1 To antalRækker
        ptFilnavn = ActiveSheet.Range("A" & ræk)
        nytFilnavn = ActiveWorkbook.Sheets(1).Range("A" & ræk) & ".pdf"
       
        oldName = mappeNavn & "\" & ptFilnavn: newName = mappeNavn & "\" & nytFilnavn
        Name oldName As newName
    Next ræk
End Sub
Avatar billede depet Novice
19. maj 2016 - 13:02 #6
Det var simpelthen lige præcis hvad jeg havde brug for:D
Mange tusind tak for det :)

Du skulle vel tilfældigvis ikke lige have en linje til at markere sidste celle i aktive kolonne?
lige som her:
Range("A" & Cells.Rows.Count).End(xlUp).Select
Men hvor "A" skal gælde for den aktive cellekolonne. :)
Avatar billede supertekst Ekspert
19. maj 2016 - 13:17 #7
Selv tak - fint det kunne anvendes.

Vender tilbage vedr. dit ?
Avatar billede supertekst Ekspert
19. maj 2016 - 13:38 #8
Eks.:
Sub test()
    antalRækker = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
End Sub
Avatar billede depet Novice
19. maj 2016 - 13:56 #9
Den ser ud til at gøre det korrekt ja.
Jeg mangler bare lige her til sidst at den aktivere den celle, lige som min anden kode gjorde (dog kun i kolonne "A").
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