質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

2307閲覧

DoEventsについての考え方が間違っているのでしょうか?

u_zu

総合スコア53

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/02/07 09:42

エクセルのステータスバーに「処理中…」と表示させ、
メッセージボックス「終わります」に対応したらステータスバーを
非表示にさせたいのですが、

コードを実行してもステータスバーに「処理中…」と表示させることができません。

Sub Test1() Application.StatusBar = "処理中…" Application.DisplayStatusBar = True DoEvents MsgBox "終わります1" ’---------------------------この2行を挿入してもダメ----------------------------- ’DoEvents ’ ’MsgBox "終わります2" ’----------------------------この2行を挿入してもダメおわり---------------------------- Application.DisplayStatusBar = False End Sub

このプロシージャを1行ずつ、ステップ実行させると、ステータスバーに「処理中…」
と表示されることは確認できるのですが。。。

私の認識では、DoEvents でOSに制御が移るから、メッセージボックスのOKボタンに
応答する際には、画面もステータスバー「処理中…」と表示されているのが確認できると思っていたのですが。

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2022/02/07 10:08

提示のコードでステータスバーに「処理中…」と表示できました。DoEventsがなくても表示されました。 新規ブックで提示のコードを実行するとどうなりますか。
u_zu

2022/02/07 11:54

hatena19さん おっしゃる通り、新規ブックで試しましたがこちらでは表示されないです。。。 環境は、OSはwindows10 64bit, Office365で32bit版です。。。
otn

2022/02/08 03:50

> 私の認識では、DoEvents でOSに制御が移るから、 DoEvents は、「他の処理で処理待ちになっている物があれば、そっちを先に実行してくれ」というような意味なので、他の処理がない場合は何もしません。書かないのと同じ。 他の処理とは、例えば、「ボタンをクリックした時に動く処理」とかです。
u_zu

2022/02/08 12:43

otnさん ありがとううございます。
guest

回答2

0

ベストアンサー

Application.DisplayStatusBar はステータスバー自体を表示するか、どうかの設定です。

Application.DisplayStatusBar = True

イメージ説明

Application.DisplayStatusBar = False

イメージ説明

Application.StatusBar はステータスバーに表示するテキストを設定します。

Application.StatusBar = "処理中…"
イメージ説明

ステータスバーを初期状態の表示にするには、
Application.StatusBar = ""Application.StatusBar = Falseです。

イメージ説明

以上を理解の上、ご希望に合わせて使ってください。
DoEvents を入れる必要はないです。

投稿2022/02/07 12:47

hatena19

総合スコア34362

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

u_zu

2022/02/07 13:10

hatena19さん どうもありがとうございます。 最初の私の質問に書いたコード Application.DisplayStatusBar = False の代わりに Application.StatusBar = "" とすれば、確かに思い通りの挙動になります。DoEventsも必要ないですね。 ただ、(質問と少々ずれてしまうのですが)、私の最初のコードでも 最初の段階で Application.StatusBar = "処理中…" Application.DisplayStatusBar = True と書いており、(ステイタスバーの表示を明示的にTrueにしているのだから) きちんと意図通り表示されて しかるべき、と思うんですけどね。。。
enii

2022/02/07 14:24

そもそもなんですが、ご質問のソースのままだと Application.StatusBar = "処理中…" ←非表示のステータスバーに設定 Application.DisplayStatusBar = True ←ステータスバーを表示 となるので結果的に何も起こらない(非表示状態では処理が無効になる)と思うんですが、記述が逆ではないでしょうか?
u_zu

2022/02/07 14:46

eniiさん 非表示状態でも処理が無効になることはないはずです。最初に書いた通り、ステップ実行ならちゃんと表示されるので。。。
hatena19

2022/02/08 02:52

新規のブックなら、質問のコードでも表示できるのですよね。 質問のブックでは、質問のコードでは表示できない、ステップ実行すると表示できる、という状況なんですよね。 質問のブックのみでの問題だと思いますので、症状を再現できないこちらで原因を特定するのは難しいですね。 自分なら、新規ブックからもう一度作りおなしますね。
u_zu

2022/02/08 12:44

hatena19さん よくわからないのですが、本日、社内で全く新規ブックで作り直したら、きれいに動きました。。。正直、理由が全く分からないのですが。。。とりあえずありがとうございます。
guest

0

すみません、もう一度試してみたのですが、よくわからなくなってきました。。。

1. 新規ブックに上にあるコードを書き、保存
2. そのブックを開き、コードを走らせると、「処理中…」と表示される。
3. しかし、もう一度コードを走らせると、今度は「処理中…」と表示されない。

自分の推測

一番最初にブックを開いたときは、ステイタスバーがイメージ説明このような状態だったから
(ステイタスバーの欄に「準備完了」とあらかじめ表示されているから?)そのまま
その欄に「処理中…」と表示される。

しかし、2度目にコードを走らせたときは、一度目にコードを走らせた際の

Application.DisplayStatusBar = False

のため、ステイタスバーがあらかじめ表示されていないから、うまく「処理中…」
と表示されない。

なんかよくわからなくなってきました。。。

投稿2022/02/07 12:12

u_zu

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問