I have about 200 xlsx files in folder and i need export them to pdf in batch.
In task manager i can see an increase of memory use (excel) from about 100 MB to about 800 MB and then excel crashes. It raises after each file is exported.
So I think i need free memory after each cycle or prevent prevent the used memory from increasing.
Processor is loaded at 3-30% use, Memory at 80-93%. (Task manager)
I tried set the objects to nothing, but that didn’t help.
I tried wait 2 sec after each file, but that didn’t help.
I expect more stable memory usage by Excel and no crashes.
code for cycle files:
Sub se_TiskVsechSouboruVeSlozceDoPDF_2S()
' Print all files in folder to PDF - prejmenuje soubory dle regionu a oblasti
Dim Region, oblast, NazevProdejny, NazevPDF, KodProdejny, hlavickaDialogu As String
Dim wb As Workbook
hlavickaDialogu = "Deichmann - Export formulářů do PDF"
'name parameter only
If cVlny1 = "" Then cVlny1 = f_cisloVlny(hlavickaDialogu)
If ukoncit = True Then Exit Sub
Dim i As Integer
i = 1
'source folder path
fileDir = InputBox("Zadej cestu k souborům", "Deichmann - Tisk formulářů", "d:DokumentyPráceMS" & CisloProjektu & "-Deichmann" & CisloProjektu & "-" & cVlny2 & "Precteno_All")
If fileDir = "" Then Exit Sub
fileDir = Replace(fileDir & "", "\", "") 'osetri zaverecne lomitko
'destination folder path
outputFileDir = "d:SpojovaniRuby" & rok & "-" & cVlny2 & ""
Application.ScreenUpdating = False
FileSearch = "*"
fileName = Dir(fileDir & FileSearch, vbDirectory)
Erase search_dir
ReDim Preserve search_dir(1 To i)
search_dir(1) = fileDir
Do While fileName <> ""
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(fileDir & fileName) And Left(fileName, 1) <> "." Then
i = i + 1
ReDim Preserve search_dir(1 To i)
search_dir(i) = fileDir & fileName & ""
End If
fileName = Dir()
Loop
'cycle in files and print
For i = 1 To UBound(search_dir)
FileSearch = "*.xls*"
fileName = Dir(search_dir(i) & FileSearch)
Do While fileName <> ""
If Left(fileName, 15) = "spojene_soubory" Or Left(fileName, 17) = "vysledek_kontroly" Or Mid(fileName, 9, 15) = "_chybový_report" Then GoTo Skok
Set wb = Workbooks.Open(fileName:=search_dir(i) & fileName) 'open file
'----- macro for file save ------------------------- ---------------------
Call se_TISK_jednoho_souboru_do_PDF_2S
'------------------------------------------------------------------------------
Skok:
fileName = Dir()
Set wb = Nothing
Loop
Next
Application.ScreenUpdating = True
End Sub
and the code for the export itself:
'export one file to pdf
Sub se_TISK_jednoho_souboru_do_PDF_2S()
Dim Region as string, oblast As String, NazevProdejny As String, NazevPDF As String, KodProdejny As String, hlavickaDialogu As String
Dim lomitko As String
Dim ListDatovy As String
Dim ListTiskovy As String
Dim wb As Workbook
Dim ws As Worksheet
lomitko = ""
'sheets
ListDatovy = "Formular"
ListTiskovy = "Tisk2S"
Set wb = ActiveWorkbook
'Unlock with given poassword
Call de_Odemci_List_peku
fileName = wb.Name
fileDir = wb.path
lomitko = ""
wb.CheckCompatibility = False
Set ws = wb.Sheets(ListDatovy)
'create variables for file name from file data
Region = Replace(ws.Range("AB4").Value, " ", "") & "_"
oblast = Replace(ws.Range("AC4").Value, " ", "") & "_"
KodProdejny = Left(ws.Range(bunkaNazevProdejny).Value, 3)
'transfer czech national characters to english standard
NazevProdejny = Mid(de_Diakritika(ws.Range(bunkaNazevProdejny).Value), 5, 100)
NazevProdejny = Replace(NazevProdejny, "--", "-")
NazevProdejny = Replace(NazevProdejny, "--", "-")
' file name of pdf
NazevPDF = Region & oblast & KodProdejny & "_" & NazevProdejny & "_dotaznik"
NazevPDF = Replace(NazevPDF, "-_", "_")
If outputFileDir = "" Then outputFileDir = wb.path
'check if folder exists or create folder
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(outputFileDir) Then MkDir (outputFileDir)
'export to pdf
Sheets(ListTiskovy).ExportAsFixedFormat Type:=xlTypePDF, fileName:= _
outputFileDir & lomitko & NazevPDF & ".PDF" _
, Quality:=xlQualityMinimum, IncludeDocProperties:=False, IgnorePrintAreas _
:=False, from:=1, To:=11, OpenAfterPublish:=False
wb.Close SaveChanges:=False 'close file
Set wb = Nothing
End Sub