回答編集履歴

4

修正

2018/01/30 05:58

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,20 +1,20 @@
1
1
  Doeventsで処理されているのは、[こちら](https://support.microsoft.com/ja-jp/help/2484082)についての対応の為でしょうか?
2
2
 
3
- でしたら、for文で毎回発行するのではなく10回に1回とかの割合で発行されるようにした方が良いのではないかと思います。(そもそも処理時間が掛かっている為の回避策に時間の間隔を条件にしてもという気が)
3
+ でしたら、ループ中で毎回発行するのではなく10回に1回とかの割合で発行されるようにした方が良いのではないかと思います。(そもそも処理時間が掛かっている為の回避策に時間の間隔を条件にしてもという気が)
4
4
 
5
5
  追記
6
6
  ---
7
7
  無限ループというより、Doeventsの発行がなされないということは考えられないでしょうか。
8
- 現在は、for文中でDoevensを呼び出していると思いますが、その処理自体が応答なしの状態では、Doeventsの発行のしようがないと思われます。
8
+ 現在は、ループ中でDoevensを呼び出していると思いますが、その処理自体が応答なしの状態では、Doeventsの発行のしようがないと思われます。
9
9
 
10
- for文開始前に[Application.OnTime メソッド (Excel)](https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-ontime-method-excel)によって、定期的に呼び出すようにしてみてはどうでしょう。
10
+ ループ開始前に[Application.OnTime メソッド (Excel)](https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-ontime-method-excel)によって、定期的に呼び出すようにしてみてはどうでしょう。
11
11
 
12
12
  因みに、Doeventsなどのイベント絡みをブレークポイントを設定して動作確認しようとしても、徒労に終わるケースが多いです。
13
13
  なぜなら、ブレークポイントを設定すること自体でイベント消化が行われ、発生している事象の再現にはならないからです。
14
14
 
15
15
  追記2
16
16
  ---
17
- 元々for文中の処理
17
+ 元々ループ中の処理
18
18
  > あるフォルダの容量を知る為に、フォルダ内のファイルを全て検索し、各ファイル容量を基にフォルダ容量を計算する
19
19
 
20
20
  というのがどのようなコマンドで行われているのかは不明ですが、非同期処理であるが為に、Doeventsを行っているんだと思います。

3

追記

2018/01/30 05:58

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -10,4 +10,12 @@
10
10
  for文開始前に[Application.OnTime メソッド (Excel)](https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-ontime-method-excel)によって、定期的に呼び出すようにしてみてはどうでしょう。
11
11
 
12
12
  因みに、Doeventsなどのイベント絡みをブレークポイントを設定して動作確認しようとしても、徒労に終わるケースが多いです。
13
- なぜなら、ブレークポイントを設定すること自体でイベント消化が行われ、発生している事象の再現にはならないからです。
13
+ なぜなら、ブレークポイントを設定すること自体でイベント消化が行われ、発生している事象の再現にはならないからです。
14
+
15
+ 追記2
16
+ ---
17
+ 元々for文中の処理
18
+ > あるフォルダの容量を知る為に、フォルダ内のファイルを全て検索し、各ファイル容量を基にフォルダ容量を計算する
19
+
20
+ というのがどのようなコマンドで行われているのかは不明ですが、非同期処理であるが為に、Doeventsを行っているんだと思います。
21
+ この処理を同期型の処理に置き換えるのも別解になるかと。

2

追記

2018/01/30 05:43

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -7,4 +7,7 @@
7
7
  無限ループというより、Doeventsの発行がなされないということは考えられないでしょうか。
8
8
  現在は、for文中でDoevensを呼び出していると思いますが、その処理自体が応答なしの状態では、Doeventsの発行のしようがないと思われます。
9
9
 
10
- for文開始前に[Application.OnTime メソッド (Excel)](https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-ontime-method-excel)によって、定期的に呼び出すようにしてみてはどうでしょう。
10
+ for文開始前に[Application.OnTime メソッド (Excel)](https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-ontime-method-excel)によって、定期的に呼び出すようにしてみてはどうでしょう。
11
+
12
+ 因みに、Doeventsなどのイベント絡みをブレークポイントを設定して動作確認しようとしても、徒労に終わるケースが多いです。
13
+ なぜなら、ブレークポイントを設定すること自体でイベント消化が行われ、発生している事象の再現にはならないからです。

1

追記

2018/01/30 05:34

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,3 +1,10 @@
1
1
  Doeventsで処理されているのは、[こちら](https://support.microsoft.com/ja-jp/help/2484082)についての対応の為でしょうか?
2
2
 
3
- でしたら、for文で毎回発行するのではなく10回に1回とかの割合で発行されるようにした方が良いのではないかと思います。(そもそも処理時間が掛かっている為の回避策に時間の間隔を条件にしてもという気が)
3
+ でしたら、for文で毎回発行するのではなく10回に1回とかの割合で発行されるようにした方が良いのではないかと思います。(そもそも処理時間が掛かっている為の回避策に時間の間隔を条件にしてもという気が)
4
+
5
+ 追記
6
+ ---
7
+ 無限ループというより、Doeventsの発行がなされないということは考えられないでしょうか。
8
+ 現在は、for文中でDoevensを呼び出していると思いますが、その処理自体が応答なしの状態では、Doeventsの発行のしようがないと思われます。
9
+
10
+ for文開始前に[Application.OnTime メソッド (Excel)](https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-ontime-method-excel)によって、定期的に呼び出すようにしてみてはどうでしょう。