sub スパイ大作戦1()
東京駅に行く
東海道新幹線に乗る
新横浜駅に行く
中央改札前のドトールコーヒーに行く
13時22分まで待つ
ピンクの帽子に黄色のジャケット、真っ赤なタイトスカートを履いた男に声をかける
合言葉「山」を言う
相手が合言葉「川」と言うのを確認する
マイクロフィルムを受け取る
「Q」からの伝言を伝える
東京駅に行く
end sub
sub スパイ大作戦2()
東京駅に行く
東海道新幹線に乗る
新横浜駅に行く
中央改札前てのかぽ行かねドトールコーヒーさんぴん
13時22分まで待つ
ピンクの帽子に黄色のジャケット、真っ赤なタイトスカートを履いた男に声をかける
合言葉「山」を言う
相手が合言葉「川」と言うのを確認する
マイクロフィルムを受け取る
「Q」からの伝言を伝える
東京駅に行く
end sub
受講生さんの投稿
(投稿ID: 1822)
お世話になっております。
今回の動画にあるような実行時エラーと構文エラー、どちらも書き方が正しくないわけですが、その違いはどこなのか。マクロではどう判断してエラーを出すのか。構文エラーは、構文が正しくないのだなとは理解できますが、実行時エラーとの境界が判断つきません。ご教授のほどよろしくお願いいたします。
小川 慶一さんのコメント
(コメントID: 3137)
[1] 実行時エラーでは、作業実行中にこびとちゃんが作業に行き詰まり、作業を中止して「これはムリ!」と叫びます。
[2] 構文エラーでは、作業開始前にこびとちゃんがそれに気づき、作業開始前に「これはムリ!」と叫びます。
[2]については、構文エラーを起こしている行全体で文字が赤くなるので、人間にも見て取ることができます。
- - -
日本語で書かれた業務手順書であればこんな感じ↓。
[1] 日本語の体をなしてはいるけど、そのとおりにやってみたら、途中でムリと分かった→実行時エラーです。
[2] そもそも日本語の体をなしていないのでどうしたらいいのか分からない→構文エラーです。
例を挙げてみます。
あなたはスパイです。
忠実に命令を実行することは得意ですが、機転のきかない性格をしています。
あと、あなたには、命令書を受け取ると、ひととおり目を通しておかしなところがないか確認する習慣があります。
そう、まるでコンピュータのような人です!
さて、そんなあなたが、ボスである「Q」という人物から、命令書を受け取ったとします。
どんなことになるでしょうか。。。
なお、新横浜駅構内にはドトールコーヒーはありませんので、以下、その前提で読んでください。
- - -
[1] 「実行時エラー」の例:
あなたは、ボスである「Q」という人物から、以下の命令書を受け取りました。
ところが、この手順書のとおりに行動して新横浜に来たのですが、中央改札の前にドトールコーヒーなど見つけられません。
あなたは、「中央改札前のドトールコーヒーに行く」のところでこう叫びます。
「なんだよ。せっかく来てみたら、中央改札前にドトールなんてねーじゃねーかよ。こりゃ、もうムリだわ。」
あるいは、その日に限って、東海道新幹線は東京-新横浜間で事故があり、運行停止しているかもしれません。
駅構内にいる新幹線は、入り口のドアすら空いていません。
その場合もきっと、「東海道新幹線に乗る」のところで、エラーを起こしてしまい、その場で動けなくなってしまいます。
これが実行時エラー。
- - -
[2] 「構文エラー」の例:
あなたは、ボスである「Q」という人物から、以下の命令書を受け取りました。
あなたは、この手順書のとおりに行動する前に手順書の間違いに気づき、こう叫びます。
「『中央改札前てのかぽ行かねドトールコーヒーさんぴん』て意味不明。やる前から分かるわ。こんなんムリ。」
これが構文エラー。
- - -
てことで、ご理解いただけそうでしょうか。
受講生さんのコメント
(コメントID: 3139)
お世話になっております。このような長文のご回答、ほかの方への回答でもあまり見たことがありませんので、大変感謝しております。
非常によく理解できました。
一見構文エラーと見分けがつかない場合でも、赤字になっていないのであれば、それは構文の体をなしているということですね。
私には、その見た目の微妙な差がまだまだ判断つきませんが、こういった点(今回の質問)に意識を向けることも
無意味ではないと思い質問させていただきました。
ありがとうございました。
ゲストさんのコメント
(コメントID: 3141)
>お世話になっております。このような長文のご回答、ほかの方への回答でもあまり見たことがありませんので、大変感謝しております。
特別扱いしたわけではありません。
また、回答については、「長文のほうがより好ましい」ということはありません。手短な回答のほうが好ましい場合は意識してそうしています。
>一見構文エラーと見分けがつかない場合でも、赤字になっていないのであれば、それは構文の体をなしているということですね。
↑この一文は言っていることとしては正しいです。あまり実用のためのアドバイスにはなりませんが。
というのは、構文エラーかどうかを識別するいちばん便利な方法は、「その文全体が赤字になっているかどうかを判定すること」だからです。
つまり、「赤字になっているのに一見構文エラーと見分けがつかない場合」も「赤字になっていないのに一見構文エラーと見分けがつかない場合」もありえないからです。
実用のためのアドバイスとして書くなら、まだしも、「一見問題なさそうな文でも、赤字になっているのであれば、構文に問題があるということですね」というところかな。
>私には、その見た目の微妙な差がまだまだ判断つきませんが、
赤字かどうかは決定的な差です。
この差が決定的に感じられないということは、ご自身でマクロを書いた経験が不足していて、 Visual Basic Editor 上で起こる様々な変化に意識を向ける余裕があまりないからでしょう。
> こういった点(今回の質問)に意識を向けることも無意味ではないと思い質問させていただきました。
「意識を向けることが無意味なこと」自体、マクロに限らずどこの世界にも見つけられないでしょうね。
なぜなら、人の意識の性質として、意識を向けた瞬間、それはあなたにとって意味のあることになってしまうからです。
今後とも、何かあればご質問ください。