27. september 2007 - 20:56Der er
8 kommentarer og 1 løsning
Åben flere filer i samme bibliotek og gem som PDF - VBA
Har en kode (i form af en knap - tilføjelsesprogram) som åbner excelfil via dialogboks.
Den åbner Excelfil og gemmer den som PDF-fil (Excel 2007- som indeholder gem-funktionalitet til PDF), afhængigt af oplysninger i filen, på rette sted på drevet.
Efter PDF-dannelse lukkes excelfilen.
Denne makro fungerer fint.
Tager ca. 5-10 sekunder idet den laver en del tilpasning af opsætning inden PDF-gem. Lidt langsom, men det må der arbejdes med.
Kan man sætte sætte makroen til at gennemløbe et helt bibliotek med 5 til 50 filer. Vælge bibliotek, Åbne alle (en efter en), gem som PDF og lukke - og dernæst næste fil. Filerne har samme type indhold.
Hvis dette kunne lade sig gøre ville det være genialt.
Her er noget kode som jeg ofte benytter mig af. Det er kopi er alt kode i et kodemodul, hvis og du kan teste det ved at køre makroen "DebugPrintFilesNames" og se resultatet i Immediate (Ctrl+G) vinduet.
Inde i løkken For iZ = 1 To miX Debug.Print mstrFileNames(iZ) Next iZ kan du sikkert udskrifte Debug kommandoen med et eller andet der kalder din SaveAsPDF funktion.
Jeg har forsøgt mig. Lidt uden held fordi den ikke vælger det bibliotek, som jeg har angivet. Men det kan være mig der ikke har overblikket. P.t. gemmer den den åbne fil som pdf i rigtigt bibliotek - men tager ikke de filer som er i biblioteket. Er nok ikke en stor ørn til dette.
Derudover: Hvorledes vælger brugeren lettest biblioteket (hvor xls-filerne ligger) - via en userform (kan man jo lave) eller en dialogboks (men er det lettere med en eller anden form for dialogboks). Det kan jeg ikke umiddelbart gennemskue.
Koden - som i øvrigt er kopi jf ovenfor:
Option Explicit Private mstrFileNames() As String Private miX As String Public PDFNavn, PDFFilnavn As String Public Sub DebugPrintFilesNames() Dim iZ As Integer
FindTheFiles "C:\TestMakro\FilBibliotek", "xls"
For iZ = 1 To miX
'navngivning og gem af pdf-fil. Range("A1").Select ActiveCell.FormulaR1C1 = _ "=MID(CELL(""filnavn""),FIND(""["",CELL(""filnavn""))+1,FIND("".xls"",CELL(""filnavn""))-FIND(""["",CELL(""filnavn""))-1)" PDFNavn = ActiveCell.Value
End Sub Public Sub FindTheFiles(ByVal strFilePath As String, ByVal strFileType As String) Dim strTmpFileName As String
'Vælger bibliotek If Not Right(strFilePath, 1) = "\" Then strFilePath = strFilePath & "\" miX = 0
'Indlæsning af filer til et array miX = 0 ReDim Preserve mstrFileNames(miX) strTmpFileName = Dir(strFilePath) mstrFileNames(miX) = strTmpFileName
Do strTmpFileName = Dir If strTmpFileName <> "" Then If LCase(Right(strTmpFileName, Len(strFileType))) = LCase(strFileType) Then miX = miX + 1 ReDim Preserve mstrFileNames(miX) mstrFileNames(miX) = strTmpFileName End If Else Exit Do End If Loop
'Sortering af filnavne alfabetisk (kun i Word) 'WordBasic.SortArray mstrFileNames() End Sub
Du åbner slet ikke noget regneark på noget tidspunkt... måske denne her vil hjælpe dig på vej
Option Explicit
Private Const mstrFilePath As String = "d:\VBA\_Test\" 'Skal slutte med en \ Private mstrFileNames() As String Private miX As String Public PDFNavn, PDFFilnavn As String
Public Sub DebugPrintFilesNames() Dim iZ As Integer Dim wbTemp As Workbook Dim sUserPath As String
'Åben fil Set wbTemp = Application.Workbooks.Open(sUserPath & mstrFileNames(iZ))
'*** kode jeg ikke har pillet i *** '*********************************** 'navngivning og gem af pdf-fil. Range("A1").Select ActiveCell.FormulaR1C1 = _ "=MID(CELL(""filnavn""),FIND(""["",CELL(""filnavn""))+1,FIND("".xls"",CELL(""filnavn""))-FIND(""["",CELL(""filnavn""))-1)" PDFNavn = ActiveCell.Value
' Luk fil wbTemp.Close SaveChanges:=False Set wbTemp = Nothing Next iZ
End Sub
Public Function UserSelectFilePath() As String Dim sRetVal Dim vntFileToOpen As Variant Dim iChar As Integer
vntFileToOpen = Application.GetOpenFilename("Text Files (*.xls), *.xls") If vntFileToOpen <> False Then 'MsgBox "Open " & vntFileToOpen For iChar = Len(vntFileToOpen) To 1 Step -1 If Mid(CStr(vntFileToOpen), iChar, 1) = "\" Then sRetVal = Left(CStr(vntFileToOpen), iChar) Exit For End If Next iChar End If
UserSelectFilePath = sRetVal End Function
Public Sub FindTheFiles(ByVal strFilePath As String, ByVal strFileType As String) Dim strTmpFileName As String
'Vælger bibliotek If Not Right(strFilePath, 1) = "\" Then strFilePath = strFilePath & "\" miX = 0
'Indlæsning af filer til et array miX = 0 ReDim Preserve mstrFileNames(miX) strTmpFileName = Dir(strFilePath) mstrFileNames(miX) = strTmpFileName
Do strTmpFileName = Dir If strTmpFileName <> "" Then If LCase(Right(strTmpFileName, Len(strFileType))) = LCase(strFileType) Then miX = miX + 1 ReDim Preserve mstrFileNames(miX) mstrFileNames(miX) = strTmpFileName End If Else Exit Do End If Loop
'Sortering af filnavne alfabetisk (kun i Word) 'WordBasic.SortArray mstrFileNames() End Sub
Tusind tak. Kan selvfølgelig godt se, at der manglede et "/".
Mht sidste kode kan jeg ikke helt gennemskue: Private Const mstrFilePath As String = "d:\VBA\_Test\". Hvorfor dette bibliotek?
Men koden gør, at jeg kan vælge en fil i et bibliotek. Dette gør jeg så. Vælger den første fil (ud af 2 xls-filer) i det ønskede bibliotek. Men den laver kun en pdf af den sidste fil - (eller overskriver denne). Såvidt jeg kan se.
Private Const mstrFilePath As String = "d:\VBA\_Test\". Hvorfor dette bibliotek? - bliver faktisk slet ikke brugt - den blever overflødig igen - bare slet det
Private miX As String - skal være - Private miX As Integer For iZ = 1 To miX - skal være - For iZ = 0 To miX
Hvordan der bliver gemt PDF filer, og hvordan du navngiver dem, det har jeg ikke pillet i, det må du selv lege lidt med eller kontakte mig via mine kontaktoplysninger på min brugerprofil.
Det er meget fint, at man ikke skal lave en userform, men istedet bruge den almindelige åbn-dialogboks. Man vælger blot den første fil - og så kører det bare. (ihvertfald i den test jeg har lavet).
Igang med en større test. Støt ind i at Excel-filer jo ikke mere er én type ifm 2007 er lanceret. Hvordan angiver jeg, at den skal finde andre typer end blot '.xls'
Se def: FindTheFiles sUserPath, "xls"
Synes godt om
Ny brugerNybegynder
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.