Board logo

標題: [發問] VBA輸出PDF於特定次數後發生問題 [打印本頁]

作者: ntpuvnm    時間: 2019-3-19 21:38     標題: VBA輸出PDF於特定次數後發生問題

本帖最後由 ntpuvnm 於 2019-3-19 21:41 編輯

最近在跑公司資料產製圖表輸出,但無論用「ExportAsFixedFormat」或「Printout」的方式處理,大約165筆左右就會異常,下方有測試時的錄影紀錄

1.不產出PDF測試可以跑完全部資料
2019-03-17VBA測試紀錄
https://youtu.be/4NK0B0OHt9U
[attach]30244[/attach]

2.產出PDF
(1)以ExportAsFixedFormat的方式產出的資料較小
2019-03-17VBA測試紀錄ExportAsFixedFormat
https://youtu.be/ZtYduSyLqnQ
[attach]30243[/attach]

(2)以printout方式產出的資料大約為ExportAsFixedFormat方法的2倍大小
2019-03-17VBA測試紀錄print
https://youtu.be/219px5hiU2k
[attach]30242[/attach]

系統資源不足,無法完整顯示。
[attach]30241[/attach]

但無論以何種方式,大約執行165筆後就會異常,觀察截圖後
讀取量大小 Printout(178,665) > ExportAsFixedFormat(151,766) > 不產出PDF(31,057)
寫入量大小 ExportAsFixedFormat(655,688) > Printout(17,874) > 不產出PDF(5,786)
其他I/O大小 Printout(1,190,267) > ExportAsFixedFormat(948,638) > 不產出PDF(104,833)
記憶體用量 ExportAsFixedFormat(231,952K) > Printout(229,096K) > 不產出PDF(172,692K)
猜想應該是記憶體使用量的問題,但是不產出PDF下執行到499筆的記憶體量卻不會發生「系統資源不足,無法完整顯示。」的問題,請問可能是哪個環節出了問題呢??

下方為轉檔時主要會用到的程式碼

Sub export()
    Dim FileName As String
    Dim myFolder$
    Dim MyFile As Object
    Dim i As Integer, filemsg As Integer

    myFolder = "D:\"

    For i = 1 To 499

    '暫停10秒
    If i Mod 50 = 0 Then
    ThisWorkbook.save
    End If

    Application.StatusBar = "目前進度" & i

        myfilepath = myFolder & FileName & ".pdf"
        輸出.ExportAsFixedFormat Type:=xlTypePDF, FileName:=myfilepath,Quality:=xlQualityStandard, IncludeDocProperties:=True,IgnorePrintAreas:=False, OpenAfterPublish:=False  'ExportAsFixedFormat方法
        '輸出.PrintOut ActivePrinter:="Microsoft Print to PDF", Copies:=1,Collate:=True, IgnorePrintAreas:=False, PrToFilename:=myfilepath  'printout方法
        Application.Wait Now() + TimeValue("00:00:01")

        Set MyFile = CreateObject("Scripting.FileSystemObject") '檢測檔案大小
        Application.Wait Now() + TimeValue("00:00:01")

        With MyFile.Getfile(myfilepath)
        filemsg = Round(.Size / 1024)

        '判斷檔案大小
        If filemsg < 50 Then
            filelog = "檔案錯誤,強制跳出迴圈"
            MsgBox (filelog)
            Exit For
        End If
        Set MyFile = Nothing

        End With
    Next
End Sub
作者: jcchiang    時間: 2019-3-20 08:12

回復 1# ntpuvnm

If filemsg < 50 Then
            filelog = "檔案錯誤,強制跳出迴圈"
            MsgBox (filelog)
            Exit For
        End If

可能是這一段檢查檔案大小,判斷檔案<50就跳出程式,可試著改小試試
作者: ntpuvnm    時間: 2019-3-20 12:50

在沒設定這段代碼就有這問題了,是設了這段終止執行才對話視窗顯示記憶體問題,否則原先的狀況是excel畫面凍結住都無反應,連問題在哪都不清楚

回復 2# jcchiang




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)