Avatar billede tvc Seniormester
01. maj 2008 - 16:16 Der er 9 kommentarer og
1 løsning

Læse antal sider i Wordfil (lukket) fra Excel

Hej

Jeg søger en VBA kode, der kan læse antallet af sider i en lukket Word-fil (rtf).

Det vil være helt perfekt såfremt VBA'en kan læse filnavnet i kolonne A (filnavnet er et tal eks. 18555 og filerne er i rtf format).

Hilsen

TVC
Avatar billede supertekst Ekspert
01. maj 2008 - 23:14 #1
I første omgang:
Koden anbringes i det aktuelle ark - i VBA-projektet er der tilføjet en reference til Microsoft Word xx Object Library

I ovennævnte er det fulde filnavn anført i Kolonne A - eller skal koden tilføje "rtf"?
Hvor skal sidetallet anføres?


Dim rtfFil, sti
Sub aflæsDok()
    sti = ActiveWorkbook.Path
    If Right(sti, 1) <> "\" Then
        sti = sti + "\"
    End If
   
    Set rtfFil = CreateObject("Word.Application")
    With rtfFil
        .Documents.Open sti + "dok.rtf"
        antalsider = .ActiveDocument.BuiltinDocumentProperties(wdPropertyPages)
    End With
   
    rtfFil.Application.Quit
    Set rtfFil = Nothing
End Sub
Avatar billede tvc Seniormester
02. maj 2008 - 11:32 #2
Kode skal tilføje "rtf", da der i kolonne A alene står 18555.

Side antallet skal indsættes i kolonne E.

Der er ca. 300 filnavne oplistet i kolonne A, hvor der skal indsættes antal sider i kolonne E i samme række som filnavnet står i.

Kolonne A              Kolonne E
18500                      2
18505                      3
18507                      2
18544                      9
18699                      3
Avatar billede supertekst Ekspert
02. maj 2008 - 14:11 #3
Rem Koden anbringes i det pågældende ark
Rem RTF-filer forventes at være i samme mappe som XLS-filen
Rem =======================================================
Dim rtfFil
Sub aflæsDok()
Dim sti, antalRæk, filnavn, antalSider
    sti = findSti
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
   
    For ræk = 1 To antalRæk
        filnavn = CStr(Cells(ræk, 1))
        antalSider = findAntalSider(sti + filnavn)
        Cells(ræk, 5) = antalSider
    Next ræk
   
    MsgBox ("Gennemgang afsluttet")
End Sub
Private Function findAntalSider(fil)
On Error GoTo fejl

    Set rtfFil = CreateObject("Word.Application")
    With rtfFil
        .Documents.Open fil + ".rtf"
        findAntalSider = .ActiveDocument.BuiltinDocumentProperties(wdPropertyPages)
    End With
   
    rtfFil.Application.Quit
    Set rtfFil = Nothing
    Exit Function
   
fejl:
On Error Resume Next
    findAntalSider = 0
    rtfFil.Application.Quit
    Set rtfFil = Nothing
End Function
Private Function findSti()
    findSti = ActiveWorkbook.Path
    If Right(findSti, 1) <> "\" Then
        findSti = findSti + "\"
    End If
End Function
Avatar billede supertekst Ekspert
07. maj 2008 - 09:03 #4
Har du afprøvet koden?
Avatar billede tvc Seniormester
07. maj 2008 - 09:40 #5
Jeg har netop afprøvet koden og den driller fortsat.

Den skriver 0 i alle felterne i kolonne E (de rækker hvor der er et filnavn i kolonne A). Det ser dermed ikke ud til at den finder et antal sider.

Når programmet har kørt skal man svarer på om man vil gemme ændringer i de filer den har åbnet - kan man ikke undgå at den åbner filerne så man ikke skal svarer på alle disse bokse?
Avatar billede supertekst Ekspert
07. maj 2008 - 23:03 #6
Ligger RTF-filerne i samme mappe som xls-filen - der returneres 0, hvis der opstår en fejl - f.eks., hvis filen ikkekan findes?

Det sidste spørgsmål - det ser jeg på.
Avatar billede supertekst Ekspert
07. maj 2008 - 23:05 #7
NB: Prøv at sende en af RTF-filerne til: pb@supertekst-it.dk
Avatar billede supertekst Ekspert
14. maj 2008 - 23:48 #8
Nogen afklaring?
Avatar billede tvc Seniormester
16. maj 2008 - 16:30 #9
Er hermed afsendt ;-)
Avatar billede tvc Seniormester
17. maj 2008 - 13:46 #10
Hej Supertekst

Det virker perfekt - tak for hjælpen!!!

-------------------- til andre ser den endelige kode sådanne ud --------------

Rem Koden anbringes i det pågældende ark
Rem RTF-filer forventes at være i samme mappe som XLS-filen
Rem =======================================================
Dim rtfFil
Sub aflæsDok()
Dim sti, antalRæk, filnavn, antalSider
    sti = findSti
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
   
    For ræk = 1 To antalRæk
        filnavn = CStr(Cells(ræk, 1))
        antalSider = findAntalSider(sti + filnavn)
        Cells(ræk, 5) = antalSider
    Next ræk
   
    MsgBox ("Gennemgang afsluttet")
End Sub
Private Function findAntalSider(fil)
On Error GoTo fejl

    Set rtfFil = CreateObject("Word.Application")
    With rtfFil
        .Documents.Open fil + ".rtf"
       
Rem Sæt visning til "UdskriftsVisning"
    If .ActiveWindow.View.SplitSpecial = wdPaneNone Then
        .ActiveWindow.ActivePane.View.Type = wdPrintView
    Else
        .ActiveWindow.View.Type = wdPrintView
    End If

        findAntalSider = .ActiveDocument.BuiltinDocumentProperties(wdPropertyPages)
    End With
   
    rtfFil.ActiveDocument.Close
    rtfFil.Application.Quit
    Set rtfFil = Nothing
    Exit Function
   
fejl:
On Error Resume Next
    findAntalSider = 0
    rtfFil.Application.Quit
    Set rtfFil = Nothing
End Function
Private Function findSti()
    findSti = ActiveWorkbook.Path
    If Right(findSti, 1) <> "\" Then
        findSti = findSti + "\"
    End If
End Function
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