掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
エクセルの画像データーを表示するには (ID:108123)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> Dim S As String > S = Dir("Path") 「変数」と「リテラル(コード中に書かれた固定値)」を区別してください。 例えば、 'パターン A If Dir("C:\TEST.TXT") = "" Then ですとか、あるいは、 'パターン B S = Dir("C:\TEST.TXT") If S = "" Then もしくは、 'パターン C Path = "C:\TEST.TXT" S = Dir(Path) If S = "" Then などのように書いた場合、これらは「C:\TEST.TXTという名前のファイルの存在確認」を 行っている事になります。これらは正しいコード例です。(ここまではわかりますか?) ところが、これを 'パターン D Path = "C:\TEST.TXT" S = Dir("Path") If S = "" Then のようにした場合は、これは間違ったコード例となります。 なぜならば、これでは『変数Pathに格納されているパス(C:\TEST.TXT)』ではなく、 『"Path" という名前のファイル』の存在確認を行っている事になるからです。 これらの違いは、とても重要な部分ですので、確実に把握しておくようにしてください。 # パターンA, B では、"C:\TEST.TXT"というリテラル値を、Dir関数にて問い合わせています。 # パターンC では、Path という変数に格納された値("C:\TEST.TXT")を、Dir関数にて問い合わせています。 # パターンD では、"Path" というリテラル値を、Dir関数にて問い合わせています。 > If S = "" Then 'ファイルの存在チェック > On Error GoTo Err_Hendle '以降、エラーが出たらErr_Hendle:以下の処理 > Else > On Error GoTo Err_Hendle '以降、エラーが出たらErr_Hendle:以下の処理 > Set Picture1.Picture = LoadPicture(App.Path & "\" & Text4.Text) S ≠ "" の際は、LoadPicture() でエラーになる可能性があるので、その直前で On Error を行うのは、処理としては非常に正しいですね。 しかし、S = "" の際にまで On Error を行うのは、適切とは言えません。 決して、上記の On Error の使い方が 間違っているというわけではないのですが、 昨晩にも回答しましたように、エラー処理は『エラーが発生する可能性のある箇所』にだけ 適用するようにしてください。 なぜなら、エラートラップの範囲が広すぎると、どこでエラーになったのが 不明瞭になるため、(初心者のうちは)デバッグが困難になるからです。 # 強固なシステムを組むために、広い範囲に On Error をかけるという事は、 # 最終的には間違いではありませんが、開発中の時点では、 # On Error の範囲を、できるだけ狭い範囲に留めておいた方が無難でしょう。 > If S = "" Then のところで "" のままで値が返されてなくて、 S が 空になっている……この事はすなわち、 『S に値を格納している部分に問題がある』という事実を指しています。 なぜ、Sが空になってしまうかというのは、今回の回答でも述べましたように、 「S = Dir("Path")」という記述に問題があるためです。 > 画像があるのにErr_Hendle:へ飛びます。 実は、Err_Hendle:』ラベル行は、エラーがあった時にだけ処理されるわけではありません。 ラベル行は、単なる「見出し」に過ぎません。本に挟む「しおり」のような物です。 On Errorによって、『エラーが発生したら、Err_Hendleという「しおり」の位置に飛べ』と 指示されてはいますが、別にエラーがおきなくても、最初から順次実行されていけば、 いずれは、Err_Hendle行の位置も処理されるというわけです。 ですから通常は、その直前などに、「Exit Sub」などといったコードを書いておき、 エラー処理ブロックが実行されないようにするのが通例となっています。 もしくは、On Error GoTo〜のかわりに『On Error Resume Next』構文を使うか、ですね。 > Dirの戻り値をIf関数で参照する方法をどこかで見た記憶がありますのでやってみましたが。これは間違いですか。 処理として、『Dirの戻り値をIf関数で参照する』というのは正しいのですが、 肝心の「Dir関数に指定した文字列」自体が間違っていたため、望むべき結果は得られません。(^_^;) > この一週間つめて取り組んできましたが後はぼちぼちやるしかありません。頑張ります。 是非とも頑張って、現在のコードを完璧に完成させてみてくださいね。 # 私が、正解のコード例を書いてしまえば、数行のやりとりで済んだのでしょうが、 # それですと、VBを本当に「理解」するには至らないであろうろかうと思い、 # あえて、コードの間違いの指摘と、間違いの理由の解説のみに留めておき、 # コーディングは、あくまで御自身で行っていただけるように誘導していたつもりです。 VBを理解するまでは大変かも知れませんが、一度わかり始めてしまうと、あとはスムーズに進みますよ。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.