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

EXCEL 2016 32bitです。

とあるexcel fileで私自身の動作は問題ないのですが
他の利用ユーザーが同じファイルでクラッシュ多発しています。

オートメーションエラーや、何も表示されず突然ファイルが閉じるなど発生するのですが
ステップインで実行したら正常に終了します。
法則性がないと言うか、いろんな場所でクラッシュするので
軽くしたいのですが



メモリの節約方法を教えていただけないでしょうか
私が作ったファイルに関連する情報ではなく幅広くあげてほしいいです。
ちなみにフォームで入力をしています。

現状私がやっている方法

set wb = nothing などでオブジェクトの解放
標準モジュールの独自の関数を出来るだけ作って、codeを長くしないように小分けで関数を実行する
他のファイルを開く前にDoEvents


以下は前回私がした質問です。

”vbModelessをやめれば、解決するのですが”とありますが・・・
最近やめてもクラッシュが連続で起きました。

https://oshiete.goo.ne.jp/qa/13132576.html

A 回答 (3件)

前回も回答しましたが、メモリの問題じゃないです。



そもそも32ビット版Excelで利用できるメモリは仕様で最大2GBまでですけど、2GBって相当大きいです。
これに引っかかるというのなら設計自体に問題があることになります。

ステップイン実行で完走する、加えてオートメーションエラーが発生する状況から言えば、処理待ちすべきところができていない可能性が高いでしょう。

極端な例だとブックAを開いて、処理が完了してからブックAを閉じないといけないのに、何らかの問題があって意図しないタイミングでブックAが閉じてしまった。この後でブックAを参照するとオートメーションエラーを起こします。ソースの書き方にもよりますが、、

裏でコードが動いてるのにdoeventsで操作ができてしまうので、処理中のウインドウをユーザーが手動で閉じてしまったとか。

だいたいExcel自体がクラッシュして落ちます。
    • good
    • 1
この回答へのお礼

ありがとうございます。
メモリではないですか
確かに2GBではありえないですよね。

フォームにテキスト入力でシート操作とか何もなしでクラッシュとかあって

ご提案いただいた、Me.repaintでクラッシュ率上がったので、メモリかなと思ったのですが

再度確認してみます。

お礼日時:2022/09/21 19:37

こんにちは



>私が作ったファイルに関連する情報ではなく幅広くあげてほしいいです。
どうしても関係してしまうので、ご容赦を・・

>メモリの節約方法を教えていただけないでしょうか
解放・・そうですが、
メモリー消費をするようなコードを見直すのが1番だと思いますよ

バインディングを見直す

vbModeless、DoEvents、sleep などの事から

loopの処理を見直す必要があるかも知れません
DoEvents、sleep はセットで使用する

オブジェクト(Range,Controlなど)へのアクセスは最小限にする
Add,SetFocus,GoToControl などは極力使わない

オブジェクト解放タイミングやSetを考察する
https://thom.hateblo.jp/entry/2015/12/20/135035

変数のスコープを考察する

状況(対象ブック)により他のExcelBookを開く時は別インスタンスを使う(メモリー消費が増えますが解放できるかな・・)

消費の激しいコードを改善する
数式入力・・範囲.Value = 範囲.Valueなど、みたいな・(範囲によります)

素人の為、個人的思い込みの可能性がありますので参考程度で・・
    • good
    • 1
この回答へのお礼

たくさんあげていただきまして、ありがとうございます。

助かります。
ControlやAddを減らして

他のファイルを開くときは、別のインスタンス名にしました。
今のところ(2日は大丈夫です。)

お礼日時:2022/09/21 19:24

昔ならともかく今じゃあまり関係なさそうな感じもしますが。


⇒昔(Excel2000辺りで)5回位やると不具合が発生した事ありました。

作業中に何度もユーザーフォームを開いては閉じるって事をするのなら、
ユーザーフォームが閉じる際のイベント
https://daitaideit.com/vba-userform-event/
でメモリから解放してあげる
https://detail.chiebukuro.yahoo.co.jp/qa/questio …
とか?

あとは常駐ソフトでCPUに負荷をかける物があるか、タスクマネージャー等で監視しながらさぎょうをしてみるとか。
他に行くなら2016にPCスペックが追いつかないとか、放熱が悪くてCPU等の温度が高めになってるとか・・・かな?
    • good
    • 1
この回答へのお礼

ありがとうございます。

フォームは一回開いて、入力途中にクラッシュするので

CPUを確認してみます。

お礼日時:2022/09/21 19:45

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