tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルVBでAcrobatを使いPDF化する
記事No12849
投稿日: 2008/07/31(Thu) 20:20
投稿者D5
お忙しい所失礼します。
VB6でExcelファイルをAcrobatを使いPDF化してます。
Acrobatは8のプロフェッショナルです。
たまに再現性がないエラーが出てしまい困っています。

エラー内容は
「実行時エラー '429': ActiveX コンポーネントはオブジェクトを作成できません。」
です。

再現できればどこで落ちてるのか分かるのですが、再現性が無い為に困っております。
ネット以外にも色々と調べており原因を探ってはいるのですが、これと言ったものが分からず本気で困っております。。。
不適切かも知れませんがこのプログラムでおかしい点はありますでしょうか?


Public Function bln_XlsPdf_fnc(ByVal xlsFile As String) As Boolean

    Dim strFileName     As String
    Dim strPdfFile      As String
    Dim pdDoc           As AcroPDDoc            'アクロバットPDFドキュメント
    
    Dim acroObjApp      As New AcroApp          'アクロバットアプリケーションを生成
    Dim acroObjAvDoc    As New AcroAVDoc        'アクロバットドキュメントを生成
    Dim fsoFile         As File                 'ファイル
    Dim fs
    
    On Error GoTo ERR_TRAP  'エラートラップ開始
    
    bln_XlsPdf_fnc = False
    
    '// Acrobatでオープンする前にファイルがあるかないかDirで聞く、無い場合は一時スリープをかけ再度聞く
    strFname = Dir(xlsFile)
    If strFname = "" Then
        
        For i = 1 To 10
            DoEvents
            
            strFname = Dir(strFileName)
            If strFname <> "" Then Exit For
            Sleep (500)
        Next i
    
    End If
        
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set fsoFile = fs.GetFile(xlsFile)

    'Acrobat表示設定
    acroObjApp.Hide

    'エクセルファイルをアクロバットで開く
    '開くと自動的にPDF化される。
    '予期しないエラーが起こった場合メッセージボックスを出した後ERR_TRAPへ
    If Not acroObjAvDoc.Open(fsoFile.Path, fsoFile.Name) Then
        MsgBox "『ファイル名:" & xlsFile & "』" & vbCrLf & vbCrLf & "EXCELファイルをアクロバットでオープンできません。", vbCritical, "PDFファイル作成"
        GoTo ERR_TRAP
    End If

    Set pdDoc = acroObjAvDoc.GetPDDoc()
    
    strFileName = Left(fsoFile.Name, Len(fsoFile.Name) - 4)
    strPdfFile = fsoFile.ParentFolder & EN & strFileName & ".pdf"
    
    'PDFファイルを保存する。
    '予期しないエラーが起こった場合メッセージボックスを出した後ERR_TRAPへ
    If Not pdDoc.Save(3, strPdfFile) Then
        MsgBox "『ファイル名:" & strPdfFile & "』" & vbCrLf & vbCrLf & "PDFファイルをアクロバットで保存できません。", vbCritical, "PDFファイル作成"
        GoTo ERR_TRAP
    End If
    
    '閉じる
    Call acroObjAvDoc.Close(1)

    'Acrobatアプリケーションの終了
    acroObjApp.Exit
    'オブジェクトの破棄
    Set pdDoc = Nothing
    Set acroObjAvDoc = Nothing
    Set acroObjApp = Nothing

    
    Set fsoFile = Nothing
    Set fs = Nothing
    
    bln_XlsPdf_fnc = True
    
    On Error GoTo 0
    Exit Function
    
ERR_TRAP:

    Call acroObjAvDoc.Close(1)
    'Acrobatアプリケーションの終了
    Call acroObjApp.Exit
    'オブジェクトの破棄
    Set pdDoc = Nothing
    Set acroObjAvDoc = Nothing
    Set acroObjApp = Nothing

    Set fsoFile = Nothing
    Set fs = Nothing

    Call ERROR_TRAP(Err, "bln_XlsPdf_fnc")  'エラー内容をメッセージボックスにて表示

End Function


以上です。
引数のByVal xlsFile As StringはPDF化するExcelのPath先が入ってます。
このプログラムはかなりの数のExcel帳票をPDF化します。
多い時は何万件と言うExcelをPDF化します。
Excel1つの容量は最大で5MBあるやつもあります。
シート数も最大で70くらいあるExcelも存在します。
どうやら容量が大きかったりシートが多いExcelの時にこのエラーが発生する様です。
自分的にはExcelが上記の様な時、acroObjAvDoc.Openで開こうと思っても時間がかかる為に、次のPDFになるExcelが入ってきてどんどんキューに溜まる為メモリ不足になるのかな?と思ってるのですが…。
実際、メモリをかなり積んでるPCでは起きにくい(又は起きない)事も確認してます。


それともそもそも何かおかしな点があるのでしょうか?
大変申し訳ありませんが、何か少しでも解決策があればと思い投稿してみました。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: VBでAcrobatを使いPDF化する
記事No12865
投稿日: 2008/08/07(Thu) 09:47
投稿者K.J.K.
> 再現できればどこで落ちてるのか分かるのですが、再現性が無い為に困っております。

となると何とも言えませんよね。ただ、

> どうやら容量が大きかったりシートが多いExcelの時にこのエラーが発生する様です。
> 自分的にはExcelが上記の様な時、acroObjAvDoc.Openで開こうと思っても時間がかかる為に、次のPDFになるExcelが入ってきてどんどんキューに溜まる為メモリ不足になるのかな?と思ってるのですが…。
> 実際、メモリをかなり積んでるPCでは起きにくい(又は起きない)事も確認してます。

との予想を建てているのですから、MsgBoxを出すよりは、それをログなりレポートなりに
出力して後から利用しやすくしてみるとか。

↑のが原因だとすると、オートメーションでの通信時間の Timeout を長くしてみる
とかすると、多少は改善されるかもしれません。
# App.OLEServerBusyTimeout など。

[ツリー表示へ]