アプリ版:「スタンプのみでお礼する」機能のリリースについて

生産設備のオンラインモニタを、VBAで開発中です。
インスタンス1:対OPCサーバー通信/Data取得/CSV-File生成
インスタンス2:CSV-File生成監視→モニタ処理
の構成で、各処理の確認を終了し、結合連続トライに入りましたが、『この操作を完了・・・メモリが不足しています。・・・・』が発生。

ネット情報対応を探ると Set obj*** =Nothing (済)、今後はSet obj = CreateObject(":::::")にに/obj.Quit ←これの追加、obj*1.obj*2.obj*3=#### →Dim obj*1 as ////, Dim obj*2 as &&化等々の対応を取って行く予定です。
その際の対応の効果を確認したく、エクセルメモリの使用状況を確認しようとしましたが、Application.MemoryTotal/.MemoryUsed/.MemoryFree は使用不可との事。

代替え手段を探り「実験ですお」さんのhttps://needtec.exblog.jp/21156344/ の処理にたどり着き、実行の結果として
Caption:EXCEL.EXE
CommandLine:"C:\Program Files\Microsoft Office\Office16\EXCEL.EXE"
CreationClassName:Win32_Process
CreationDate:20191127113451.903141+540
':
WriteOperationCount:510
WriteTransferCount:389313
全45項目の取得はできましたが・・・・

どれが、MemoryTotal/.MemoryUsed/.MemoryFree の事なのか理解できません。
出力項目のどれが、MemoryTotal/.MemoryUsed/.MemoryFree に相当するのか教えていただきたい。

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

  • ありがとうございました。
    dMemoryLoad = MemStat.dwMemoryLoad ' メモリ使用率
    :
    dAvailPageFile = MemStat.ullAvailPageFile ' 現在ページング可能なファイルサイズ
    dTotalVirtual = MemStat.ullTotalVirtual ' 現在使用可能な仮想メモリ
    を使用して、モニタLogでシステムメモリ(リソース)を見ていますが、使用量に大きな変動ないのに「メモリエラー発生」しています。
    エクセルに割り当てられたメモリの消費状況が見れるものと考え、Application.MemoryTotal/.MemoryUsed/.MemoryFree の代替え手段を模索中です。

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/11/28 15:52
  • ありがとうございます、試してみました。
    通常見なれているエクセルVBAの世界からシステムの深い深い井戸の中を覗くような様な感じですね(恐ろしい・・・)、しかも英語・・・。
    中にExcel.EXEの項目があり、エクセル操作でグラフ/プロパティー数字が動く事から「エクセルの処理負荷が表示」までは理解できますが、まだまだ勉強不足で理解しきれません。
    本件連続モニターでもあり、モニタLogに『エクセルの処理負荷を取込』Logに追加記録したいとの考えです、もう少し頑張ってみます。

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/12/04 12:39
  • ありがとうございます、45項目貼り付けましたが文字数オーバーで断念しました。
    Msdn/VBAフォーラムはちょっと敷居が高いかな、docs.microsoft.com を当たります。
    ご指摘のとおり全てのメモリスタック対策を進めます。
    Nothing化済/現在暗黙参照の修正中これでだめなら手詰まりに・・敷居を跨ぐか?
    ’-------------------------------
    ●VBAオンラインMoniterやはり無理があるのかな・・・メモリ不足が最大/越せない壁になるか。
    ●予算が有れば外部ソフト屋さんノウハウを買う事も出来るのでしょうが・・・。
    ●今から高次(汎用)言語のPrgを勉強しVBAとの合せ技で行くのも大変そうだし。
     インスタンス1⇒Vbs⇒インスタンス2 みたいにVBSで細切れにできそうかな?
    ・・・・思わず愚痴が出てしまいました。
    もう少し頑張ります。

    No.4の回答に寄せられた補足コメントです。 補足日時:2019/12/04 16:44

A 回答 (5件)

>VBAオンラインMoniterやはり無理が


私はそう思います。Officeは起動して処理を繰り返すとプログラム内のオブジェクトなどを解放してもメモリリソースは徐々に増加します。
再起動せずにプログラム上のリソースを解放するプログラムだけでは、オブジェクトの大きさや回数によりますが、いずれスタックするのは
避けられないと思いますよ。(24時間フルタイムなら)
インスタンス1⇒Vbs⇒インスタンス2 大変そうですが、リスクは軽減されますね。

Msdn/VBAフォーラム敷居高くありませんよ、だれでも初めてはありますし、アドバイスをもらう気持ちならOKかと。

古くから生産設備系で使用されているのは、やはりCやC++ですね。
勧めるわけではありませんが、先駆者がVB系同様に多く、情報も多いので良いかもしれませんね。また、Visual Studioなどもあるので
比較的よいかな、互換性制御機器も多いですし。?? 学習となるとどうでしょう、今の時代疑問は残りますが。。(個人的に)
検討を祈ります。
    • good
    • 0
この回答へのお礼

お付き合いありがとうございました。

一先ず6時間連続までたどり着きました、ここまでくればエラー発生時はマニュアル再起動であきらめて、なんとかなるかと・・・・。
課題であったエクセルメモリの使用状況確認ができていないので、何が効果が有ったのか?ですが、感じとしては「非暗黙参照化」が効いたのかな・・・?

ソフト屋さんにもメール相談掛けましたが、汎用言語との合せ技対処、エクセルVBAの造りの見直し対処、・・・いろいろで、結局何が有効なのかは?のまま。
???ばかりが積み上がる結果です、このレベルでの情報量の少なさも含め、ここらへんがVBAの限界なのかと考えますが・・・・。

エクセルのセルDataを配列と考えれば、汎用言語への置き換えも考えられますが、モニタの解析ロジックがまだ試行錯誤要素もあり、エクセルのセル表示の確認の容易さ/変更の容易さ・・・等々を考えると、やはりスタートはエクセルVBAしかないかと・・・、悩ましいところです。

お礼日時:2019/12/09 08:52

先のツールは、値の取得は出来ないようですね。


ご質問に戻ると
>どれが、MemoryTotal/.MemoryUsed/.MemoryFree の事なのか理解できません。
>出力項目のどれが、MemoryTotal/.MemoryUsed/.MemoryFree に相当するのか教えていただきたい。
出力項目すべてを掲示した方が、良いと思いますよ。(肝心なところが・・なので)

>代替え手段を模索
回答もあまりつかず、情報も少ないので、より、具体的な情報を添えて
Msdn VBAフォーラムなども参考にされてはいかがでしょう。
https://social.msdn.microsoft.com/Forums/ja-JP/h …
+usも
また、メモリー、APIなどの情報であれば、待つより、https://docs.microsoft.com/ などで探す方が早いかもしれません。

ツールでは、実際に数値を表示できるので、取得方法のみですね。
先に挙げたツールも該当フォーラムが存在しており、先のアプリケーションから処理負荷を取得する方法などもあるかも知れません。

余談ですが
>この操作を完了・・・メモリが不足しています。
これが、目的と存じますが、ストレートにメモリスタック対策(すべて)を講じる方が目的に早く到達できると思いますよ。

そもそもですが、生産設備のオンラインモニタを、VBAで開発中。。。生産設備系ならVisualBasicは聞きますが
オンラインモニタでVBA、どうでしょうか?再起動は?

あと少しのところまで来ているようですので、
検討を祈ります。
この回答への補足あり
    • good
    • 0

#2です


出所が、docs.microsoft.comなので問題ないと思いますが、使用は、自己責任で行ってください。
英語なので判れば良いのですが、、

ダウンロードしたZipを解凍  procexp.exe を実行すればOK?
対象のExcelブックを起動、、エクスプローラの左にExcelが出現、アイコンをダブルクリックで
Propertiesダイアログが出現します。PerfomanceタグでMemoryなどを確認します。
他にあるタグや他のアプリ、PCの状況も閲覧できなかなかです。
    • good
    • 0

長らく放置状態なので、表題について調べてみました。



こちらのプロセスエクスプローラーは、いかがでしょうか。

https://docs.microsoft.com/ja-jp/sysinternals/do …

Excelがメモリースタックするまでは、試していませんが、なかなか使えそうですよ。
この回答への補足あり
    • good
    • 0

メモリ使用状況をプログラムに組み込むのではなく、リソースモニタを使ったらいかがでしょうか?


「Windows 管理ツール」の中に有ると思います。
この回答への補足あり
    • good
    • 0

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

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