教えて!gooにおける不適切な投稿への対応について

いつもお世話になっております。
経過時間(秒)の数値表示でも、プログレスバーの表示でも良いのですが
可視化したいのです。
VBAの進捗表示は可能ですが、その中でVBA以外の処理に依存中は進
捗状況の表示処理も中断されてしまいます。
具体的には、VBAの一連の処理の中でPDFをエクセルに変換する処理
が含まれますが、この処理が一番時間がかかり、その進捗状況もリアルタ
イムで可視化できればと思っています。
他のアプリが動作中も、強引にVBAの中で動くことのできるタイマー処
理などがあればと可能だと思うのですが、知識がありません。
その他良い方法があればご教示いただきたいと質問させていただきました。
よろしくお願いします。

質問者からの補足コメント

  • つらい・・・

    お礼の文に誤りがありました。
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePD・・・・・・・
    は、エクセルをPDFに変換する処理の部分でした。
    (本プロセスには、この処理もあり、同じく時間がかかるため同様に進捗状況を
    しりたいのですが)
    PDFをエクセルに変換する部分は
    lRet = objAcroAVDoc.Open(PDF_NAME, "")
    Set objAcroPDDoc = objAcroAVDoc.GetPDDoc()
    Set jso = objAcroPDDoc.GetJSObject
    jso.SaveAs PDF_NAME, "com.adobe.acrobat.xlsx" でした。
    各行の所要時間をしらべて、均一であれば各行間に、進捗可視化処理を挿入してみます。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/04/07 12:18
  • つらい・・・

    試してみました。
    jso.SaveAs TEMP, "com.adobe.acrobat.xlsx" で1番時間を要しており
    5秒程度かかっていました。この5秒間の時間の経過も可視化できればと思
    っています。

      補足日時:2018/04/08 08:16
gooドクター

A 回答 (5件)

Acrobat を COM で呼び出して処理させているのですね。


Acrobat が途中経過を呼び出し側に出力する仕様になっていない以上無理だと思います。

呼び出し側の VBA でできることと言えば、処理する 「何か」 の単位に対するステップ数の進捗表示ぐらいかと。
進捗表示させたい工程にどんな処理が含まれているのかわかりませんが、例えば単純に 「とあるフォルダーにある PDF ファイル群をすべて Excel ファイルに変換する」 だったら処理対象のファイル数が分母になり、1ファイル終わるごとにカウントアップするとか。
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
おっしゃる通りで、Acrobatへ処理を投げたステップで、その処理が終わるまで
VBAでは次のステップへ進まないのが、問題なのです。
そこで、先にタイマーを起動しておいて、そのあとでPDF→EXCEL変換処理を行う
ことができないかと思っています。
昔VB6の時代ではTimerコントロールを使ったことがありましたがVBAにはTimer
コントロールはありませんね。
またAPIのtimeSetEventを使って、試してみましたが、うまくいったり、フリーズ
したりと、極めて不安定で使い物になりませんでした。
他に方法がないものかと、博識な皆様のご意見・ご指導を仰ぎたくお願いいたし
ます。

お礼日時:2018/04/10 20:45

お疲れさまです。


なかなか大変ですね。

ご質問者さまは、ステータスバーや、ユーザーフォームとかでストップウォッチの様なものは作成できますでしょうか?

もし作成ができれば、それも動かしながら、PDF変換マクロを実行すれば良いと思います。

もし、変換処理でメモリを食ってしまい、ストップウォッチのカウントアップもされなくなってしまう場合は、別の手段が必要です。

また、ご連絡頂ければと思います。
    • good
    • 1

お疲れさまです。


毎回決まって5秒でしたら5秒のカウントダウンをステータスバーに表示すればよいと思います。

PDFファイルによって秒数が変わるとカウントダウンは厳しいので経過時間を秒数で表示させ、その処理が終了したらカウントアップを中止するとともにステータスバーの表示をやめればよいと思います。

頑張ってください!!
    • good
    • 0
この回答へのお礼

再度のご指導ありがとうございます。
変換所要時間は、PDFファイルのザイズによって大きく異なります。

>PDFファイルによって秒数が変わるとカウントダウンは厳しいので経過時間を秒数で表示させ.......

変換中は経過時間も表示させることができません。変換中も経過時間をリアルに表示できればいいのですが.......。

お礼日時:2018/04/08 12:36

お疲れさまです。



 PDFをエクセルに変換する処理をどの様に記述しているかわかりませんが、
 もし、単一の命令で一気に処理を投げかけその処理が終了するまで待っているのであると
 プログレスバーや、経過時間を表示させるのは厳しいかもしれません。

 私は、長い処理を行う時は、処理をステップに区切り、ステータスバーにステップ1経過時間●●分の様に
 表示させています。
 これは、例えばですが、STEP1開始時のシステム時刻を変数に格納し、表示させる直前のシステム時刻から
 引かせて表示等をさせていますが、どこにこの記述を埋め込むかは、プログラムの作りで違ってきます。
 
 これも、処理が細切れでところどころにスクリプトが記載できることが前提ですので、ご了承ください。
この回答への補足あり
    • good
    • 0
この回答へのお礼

さっそくのご指導ありがとうございました。
おっしゃる通り、PDF変換は、次のような処理でおこなっております。
Sheets("XXXX").Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePD・・・・・・・
なので、区切りに可視化のための処理を組み込むことができないのです。
この変換処理中も、処理を強引に横取りできるタイマー処理のようなものが
VBAで存在していればいいのですが。

お礼日時:2018/04/07 11:50

市役所などの自治体で行っているパソコン相談で相談したほうが良いと思います。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング