• ベストアンサー

例外ってIf文の中に入れますか?If文の外でTry...Catchしますか??

例外ってIf文の中に入れますか?If文の外でTry...Catchしますか?? Sub Cal(By Val Data As String)  If ( Flag = "hoge") Then  Total = js.Eval(Work)  End If End Sub それと、”エラーコードをテキストの説明に変換する”FormatMessage関数を使おうと思っています。 「例外処理 = FormatMessage関数」という図式は古いですか?いまはもっと違う方法ですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

FormatMessage関数を初めて聞いたので突っ込まなかったのですが、ちょっと調べてしました。 http://msdn.microsoft.com/ja-jp/library/cc428939.aspx Win32APIを利用した関数なんですね。 戻り値が存在していろいろできるみたいですね。 ・関数が成功すると、バッファに格納されたバイト数(Unicode 版の場合は文字数)が返ります(終端のNULLを文字除く)。 ・関数が失敗すると 0 が返ります。拡張エラー情報を取得するには、 GetLastError 関数を使います。 調べた結果ですが、これを必要とするのであれば使ってもいいと思います。 但し、例外処理でメッセージを出したいだけであれば MessageBox.Show を使ってしまうと思います。

rescue98
質問者

お礼

ありがとうございます。 関数が失敗すると、コンパイラがそのエラー情報をコードではなく、 文字列にして説明してくれるらしいです。 FormatMessageがあまり使われないことがわかって、大変為になりました。

その他の回答 (2)

回答No.2

サンプルに載ったコードを見る限りだとIFの外にTry-Catchを書きます。 ■理由 この変数「Flag」の型がわからない為、例外を発生させる可能性がある。 多分、文字列のメンバ変数であろうと予想はできますが確証が持てないので・・・。 また、Try-Catchに関してですが、基本的には外で書きたい派です。 予想できる例外なんて実装の時点で対応するべきで、例外と考えませんし・・・。

rescue98
質問者

お礼

ありがとうございます。 「予想できる例外なんて実装の時点で対応するべきで、例外と考えません」 かっこいいw 簡単な電卓なので、Flagの型に変な型入らないです。 Eval()の上下を囲むことに決意しました。

rescue98
質問者

補足

ところで、FormatMessage関数を使うのは間違いですか? MessageBox.Show("あなたは禁断の0除算を行いました")を使いますか???

回答No.1

If文の中か外かはまったく気にしません。 あくまで「必要な場合に必要な範囲で」使います。 あと,Try - Catchはあまり使いません。 ref: むやみにキャッチしないでね。ゴールキーパー以外はハンドで反則ですよ。 - NAL-6295の舌先三寸 http://d.hatena.ne.jp/NAL-6295/20050909/p1

rescue98
質問者

お礼

あがとうございます。 0除算のときに例外処理を書きたいと思っています。 Try...Catchだと、ポップアップを出して処理が終了してしまうんですか。 まあ、処理が終了してくれていいんですけど。 Try-Finallyで、ポップアップして処理を抜け出すようにしたいです。 出来ますか? Throwしたらまずいですよね・・・無い方がましかも。

rescue98
質問者

補足

ところで、FormatMessage関数を使うのは間違いですか? MessageBox.Show("あなたは禁断の0除算を行いました")を使いますか???

関連するQ&A

  • 0除算の例外処理ができない!!助けて!!

    0除算の例外処理ができない!!助けて!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try If (Flag = "数値") Then Flag = "演算子" Work = Total + Calc + Input Total = js.Eval(Work) Input = "" TextBox1.Text = Total End If Catch ex As Exception MessageBox.Show("Exception Error : 0除算を行いました。") End Try ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Total + Calc + Inputは、すべて文字列です。 実行すると、ポップアップではなく、テキストエリアにこんな文字列が・・・ 0除算しても例外が発生しない・・・ 0 / 0 ・・・NaN (非数値) 1 / 0 ・・・+∞ そもそも、0除算ってなんですか??? 0で割っても例外が出ない!!

  • if文での0の挙動

    phpでの簡単なif分を使った関数です。 顧客テーブルにflagを付けて、賞品Aの利用者であるか無いかを判別しています。利用者でない場合$flag=0、利用者の場合$flag=1とします。 function userlist($flag = null){ if($flag != ""){ // リストを取得するSQL文 } } とした場合、引数として$flag=0を渡すと全顧客リストが返されます。 isset,is nullも同じです。 数値での0が渡された場合はif分ではtrueが返されたと思ったのですが.....教えて頂けないでしょうか?

    • ベストアンサー
    • PHP
  • IF文の作り方

    エクセル VBA 超入門のものなんですけど、質問させてください。 A1のセルに 1を入力したら、セルD1に正解を表示させ、 それ以外なら不正解を表示させたいのですが、  以下の文でつくると 実行した最初しか起動してないような気がするのですが、教えてください。どうすればセルA1を入力するたびに、 正解、不正解をD1に表示させれるでしょうか? Sub テスト() If Range("A1") = "1" Then Range("D1").Value = "正解" Else Range("D1").Value = "不正解" End If End Sub

  • AJAXの計算式の中にIF文を入れて表示したい

    下記の2つのファイルで、フォームから入力した数値同士の「足し算の結果」をAJAXで表示できます。 ******************************************** 【HTMLフォーム】 <script language="JavaScript" type="text/javascript" src="js/culc.js"></script> <form name="f1"> <input type="text" id="text1" name="text1" size="10" maxlength="10" /> + <input type="text" id="text2" name="text2" size="10" maxlength="10" /> <input type="button" value="足す" onclick="readText()" /> </form> <p id="message"></p> ******************************************* 【JAVASCRIPT(culc.js)】 function readText() { var text1 = document.getElementById("text1"); var text2 = document.getElementById("text2"); var message = document.getElementById("message"); var str_val1 = text1.value; var str_val2 = text2.value; var sum; if (isNaN(str_val1) || str_val1 == "" || isNaN(str_val2) || str_val2 == "") { textMessage = "数値以外の文字が入っています"; } else { //sum = str_val1 + str_val2; sum = parseFloat(str_val1) + parseFloat(str_val2); textMessage = "合計は、" + sum + "です"; } message.innerHTML = textMessage; } ************************************************ 【質問】 このjavascriptを改造し、入力した数値についての「足し算の結果」が正の数だった場合には「正の数」、負の数だった場合は「負の数」と表示すべく改造しております。下記の改造を施したのですが、うまく表示されません。 下記の文のどこが誤りか修正頂けませんでしょうか? 宜しくお願い致します。 【JAVASCRIPT(culc2.js)】 function readText() { var text1 = document.getElementById("text1"); var text2 = document.getElementById("text2"); var message = document.getElementById("message"); var str_val1 = text1.value; var str_val2 = text2.value; var sum; if (isNaN(str_val1) || str_val1 == "" || isNaN(str_val2) || str_val2 == "") { textMessage = "数値以外の文字が入っています"; } else { //sum = str_val1 + str_val2; sum = parseFloat(str_val1) + parseFloat(str_val2); textMessage = "(if((sum > 0) { document.write("正の数"); } else((sum <= 0) { document.write("負の数"); } ))"; } message.innerHTML = textMessage; }

    • ベストアンサー
    • AJAX
  • IF文の別の使い方?

    タイトルはどうすればいいか現状ではよく分かりませんが、 最近PHPとJSを勉強しはじめました。 そして、覚えた順番が悪かったのかPHPとの仕様が違い、 PHPを書いていて、Perlでこれを使えないかなぁと思ったので質問したしました。 PHPでは<? if ($inputType == $val["id"]) { echo ' selected="selected"'; } ?> などとHTMLタグの中に記述が可能ですが、 私が考える限り、perlではHTMLタグの中に記述するには printを終了させてIF文を作り、またprintを記述すると 非常に手間が掛かります 例: print '<input type="submit" value="確認"'; if(~略~){print"disabled";} print">"; といった感じでしょうか? 余りにも手間が要るのでJSでdisabled化していますが、 PerlでもPHPのように簡単にHTMLタグの中に記述できないでしょうか?

    • ベストアンサー
    • CGI
  • if文からcase文への置き換え

    ピクチャボックスをクリックしたら、チェック ボックスがチェックされるメソッドを作りたいと 思っています。 Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click,PictureBox2.Click 'ここから If sender Is PictureBox1 Then If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If ElseIf sender Is PictureBox2 Then If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End If 'ここまで End Sub 上記のif文をCase文に置き換えたくて、 'ここから Select Case sender Case PictureBox1 If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If Case PictureBox2 If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End Select 'ここまで 上記のように書き換えたのですが、エラーが出てしまいます(ビルドは通るのですが)。 Case文の使い方が間違っているんだとは思いますが、どこがどう 間違っているのがよくわかりません。 ご教授いただけないでしょうか?

  • (.NET)IF文の計算結果が思ったのと違う!?

    IF文でiとjの足す処理が括弧にくくられているので、きちんと足される思ったのですがラベルでの実行結果が0になります。 コード上は計算されているように見えるのですがなぜ計算されていないのでしょうか?計算できないとしたらIF文の中では計算処理ができないということでしょうか? 回答のほどよろしくお願い致します。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i, j i = 0 j = 0 If (i = i + 1) = 0 Or (j = j + 1) = 0 Then MessageBox.Show("+1") End If Label1.Text = i Label2.Text = j End Sub

  • 再質問 長いIF文を短くしたい

    お世話になっております 先日1/24に、条件を示さずに「長いIF文を短くしたい」という質問をしてしまいました こちらの手抜きをお詫びします 前回keithinさんにアドバイスいただいた方法で書き直しましたので これをさらに簡単に書く方法があれば教えてください 以下は、Private Sub Worksheet_Change(ByVal Target As Range)内のマクロです If Target.Row >= 15 And Target.Row <= 100 And Target.Column = 9 Then If Range("I" & Target.Row).Value < Range("J" & Target.Row).Value Then If Range("G" & Target.Row).Value >= 1 Then If Range("I" & Target.Row).Value >= Range("G" & Target.Row).Value Then If Range("I" & Target.Row).Value Mod Range("G" & Target.Row).Value = 0 Then  処理 End If End If End If End If End If

  • 自作関数でIF文はできないのか?

    SELECT テーブル1.ID, IIf([テーブル1]![ID]=1,"1です","1ではない") AS 1かどうか FROM テーブル1; というクエリ1を作成しました。 「IIf([テーブル1]![ID]=1,"1です","1ではない")」の部分を vbaのFunctionプロシージャーで記述したいのですがうまくできないです。 標準モジュールに Public Function IF文() IF文 = "IIf([テーブル1]![ID]=1,""1です"",""1ではない"")" End Function を作成し、 クエリ1のSQL文を SELECT テーブル1.ID, IF文() AS 1かどうか FROM テーブル1; としたら 「1かどうか」フィールドには関数式の結果ではなく、 関数式が文字列として表示されました。 (添付参照) 訳あって、 SQL文の一部をvbaで記載したいのですが上記のようなことは不可能でしょうか? ご教授よろしくお願い致します。

  • javascriptのクラスの処理について

    javascriptのクラスを利用した処理で分からない所がありますので 教えて下さい。 最初に 下記の「1.の方法」でhtml側にjavascriptを呼び出す記述を して動かしていましたが、「2.の方法」に変更しなければならなく なりました。 ところが、「2.の方法」でやりますと、メインのhtml側がフリーズ してしまいます。 調べてみますと、メモリーを食いつぶしていますので、何か永久ループの ような状態に陥っているようです。 こような場合、何かやり方がおかしいのでしょうか? ご存知の方がいらっしゃいましたら、ご教授お願いいたします。 === 1.の方法 ===(問題なく動きます)================= ---ソース(index1.html) <script type="text/javascript" src="js1.js"></script> <script type="text/javascript"> hoge.create( abc, "def"); </script> ---ソース(js1.js) var hoge = {   xxx: ~~,   yyy: ~~   create: function(val1,val2) {     ~略~ }; === 2.の方法 ===(フリーズしてしまいます)=========== ---ソース(index2.html) <script type="text/javascript" src="js2.js"></script> <script type="text/javascript"> hoge_sub(); </script> ---ソース(js2.js) function hoge_sub(){   hoge.create( abc, "def"); } var hoge = {   xxx: ~~,   yyy: ~~   create: function(val1,val2) {     ~略~ };

専門家に質問してみよう