回答編集履歴

4

修正

2022/04/02 13:41

投稿

退会済みユーザー
test CHANGED
@@ -7,19 +7,13 @@
7
7
   
8
8
  ---
9
9
 
10
+ 【原因】
11
+ GASでは、画面への反映にタイムラグが生じることがあります。
12
+ Range.getValue()を複数回呼び出す場合などの場面では、パフォーマンス向上のため、スプシの操作が内部的にまとめて行われる場合があります。
10
13
 
11
- 【原因】
12
- メッセージボックスが表示された時点で、内部の②③の処理自体は完了しています。
13
- たとえば、スクリプトの最後の方、Browser.msgBox~の1行前に
14
- console.log("!!処理終了!!")
15
- という行を追記して実行してみると、
16
- スプレッドシート上質問文中②③は表示されせんが)エディタの実行ログ画面には、「!!処理終了!!」と表示され、メッセージボックスが表示されるはずです。
14
+ しかし、Browser.msgBox()関数が呼び出されると、まとめて行われる予定だった操作がトッしてしまうため、質問のような状態になります。
15
+ (OKを押すと、保留されていた操作が再開します)
17
16
 
18
- GASでは、「処理の実行」と「処理の反映」との間でタイムラグが生じることがあります。
19
- (Range.getValue()を複数回呼び出す場合など、パフォーマンス向上目的でまとめて行うため)
20
-
21
- Browser.msgBox()関数が呼び出されるとストップしてしまうため、質問のような状態になります。
22
-  
23
17
  【解決策】
24
18
  メッセージボックスの表示前に、
25
19
  SpreadsheetApp.flush()

3

 

2022/04/02 13:35

投稿

退会済みユーザー
test CHANGED
@@ -3,8 +3,10 @@
3
3
 
4
4
  > b) 現コードをどのように修正すれば、「実現したいこと」欄に記載のタイミングでメッセージボックスが表示されるようになりますか?
5
5
  →メッセージボックスの表示前に、SpreadsheetApp.flush(); を追記します。
6
-   
6
+
7
+  
7
8
  ---
9
+
8
10
 
9
11
  【原因】
10
12
  メッセージボックスが表示された時点で、内部の②③の処理自体は完了しています。

2

追記

2022/04/02 13:35

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,11 @@
1
+ > a) Browser.msgBox のコードを記載する位置に誤りがありますか?
2
+ →誤りはありません。
3
+
4
+ > b) 現コードをどのように修正すれば、「実現したいこと」欄に記載のタイミングでメッセージボックスが表示されるようになりますか?
5
+ →メッセージボックスの表示前に、SpreadsheetApp.flush(); を追記します。
6
+   
7
+ ---
8
+
1
9
  【原因】
2
10
  メッセージボックスが表示された時点で、内部の②③の処理自体は完了しています。
3
11
  たとえば、スクリプトの最後の方、Browser.msgBox~の1行前に

1

 

2022/04/02 13:32

投稿

退会済みユーザー
test CHANGED
@@ -5,15 +5,15 @@
5
5
  という行を追記して実行してみると、
6
6
  (スプレッドシート上質問文中の②③は表示されませんが)エディタの実行ログ画面には、「!!処理終了!!」と表示され、メッセージボックスが表示されるはずです。
7
7
 
8
- GASでは、「処理の実行」と「実行結果が画面シートに反映されるタイミングタイムラグが生じることがあります。
8
+ GASでは、「処理の実行」と「処理の反映」との間でタイムラグが生じることがあります。
9
- (Range.getValue()を複数回呼び出す場合など、パフォーマンス向上目的でまとめて行われるため)
9
+ (Range.getValue()を複数回呼び出す場合など、パフォーマンス向上目的でまとめて行ため)
10
10
 
11
- Browser.msgBox()関数が呼び出されると、書き込みの表示処理までストップしてしまうため、処理がなされていないかのように見えます。
11
+ Browser.msgBox()関数が呼び出されるとストップしてしまうため、質問のような状態なります。
12
12
   
13
13
  【解決策】
14
14
  メッセージボックスの表示前に、
15
15
  SpreadsheetApp.flush()
16
- という関数をコールして、強制的に描画させます。
16
+ という関数をコールして、保留中となっているスプレッドシートへの変更を、強制的に適用させます。
17
17
 
18
18
  ```diff
19
19
  (略)