[[20100301164155]] 『セルで指定した画像を表示 2』(しょう) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルで指定した画像を表示 2』(しょう)

 新たに問題が発生しましたのでもう一度お願いします。

 Sheet2に300件程のデータ表があり、Sheet1のA1にb入力すると

 指定したbフ情報をVLOOKUP関数で表示できるようにしてあります。

 同時にSheet1のImage1に画像表示をできるようになりました。

 そこで問題が起きたのですが、4つの画像を表示できるようにしたところ画像の

 ないものがあると実行時エラーが出てしまいます。画像のない場合に何も表示

 しないようにするにはどのようにしたらよいのでしょうか?

    If Target.Address = "$A$1" Then
    Dim PicPath As String
    PicPath = ThisWorkbook.Path & Range("指定したセル1").Value
    ActiveSheet.Image1.Picture = LoadPicture(PicPath)
    PicPath = ThisWorkbook.Path & Range("指定したセル2").Value
    ActiveSheet.Image2.Picture = LoadPicture(PicPath)
    PicPath = ThisWorkbook.Path & Range("指定したセル3").Value
    ActiveSheet.Image3.Picture = LoadPicture(PicPath)
    PicPath = ThisWorkbook.Path & Range("指定したセル4").Value
    ActiveSheet.Image4.Picture = LoadPicture(PicPath)
    End If

ご教授願います。

 Excel2007    OS Windows Vista

[[20100227215919]] 『セルで指定した画像を表示』(しょう)


 こちらはどうでしょうか?
http://www13.plala.or.jp/mugi_cyan/excel/vba_times/lesson_02_01.html

 (てつろう)

 ありがとうございます。
 いろいろと組み合わせて試したのですが、初心者の私にでは思うように動いてくれません。
 意味を理解してから質問すべきですね。
 下記のようになっており、もう少し頑張ってみます。
 まずはお礼のコメントを一度させていただきます。

Dim PicPath As String

    If Target.Address = "$A$1" Then
    If Dir(PicPath) = "" Then
    Image1.Picture = LoadPicture("")
    Else
   PicPath = ThisWorkbook.Path & Range("指定したセル").Value
    ActiveSheet.Image1.Picture = LoadPicture(PicPath)
    End If
    End If

End Sub

 (しょう)


 やはり画像の無いところでエラーが出てしまい動いてくれません。
 どなたかご教授願います。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim PicPath As String
    If Target.Address = "$A$1" Then

    PicPath = ThisWorkbook.Path & Range("台帳!AE8").Value
    If Dir(PicPath) = "" Then
        Image1.Picture = LoadPicture("")
    Else
    ActiveSheet.Image1.Picture = LoadPicture(PicPath)
     End If
    End If
 End Sub

 (しょう)


 >画像の無いところでエラーが出てしまい動いてくれません。
 どこですか?はっきりエラーが発生したコードを特定してください。

 >Image1.Picture = LoadPicture("")

 これですか? Excel2002では、エラーになりませんが。

 Range("台帳!AE8").Value
 このセルには、実際に何が記述されていますか?

 >Image1.Picture = LoadPicture("")

 これは 

 set Image1.Picture =nothing

 とすると、どうなりますか?

 ichinose


 おっと、衝突しちゃいましたが。。。

 どの様なエラーが出ますか?
 エラーが出て止まってしまう場所と
 エラーメッセージを書くようにして頂くのが良いと思います。

 もしかして
   PicPath = ThisWorkbook.Path & Range("台帳!AE8").Value
 の行で
  実行時エラー 13
   型が一致しません
 ・・・ですか?

 (HANA)

 PicPath = ThisWorkbook.Path & "\" & Application.Range("台帳!AE8").Value
                ↑     ↑
 ここに"\"を補わなくても大丈夫ですか?  ここは念の為、Application.を補って置いた方がよさそう。(実態が分からないので)

 (半平太) 2010/03/01 23:17

 平日に日をまたいでしまうので、もう寝ますが・・・(明日も5時おきなので)。

 エラー原因を疑える箇所が投稿されていますが・・・・。

 それは、そのうち明らかになるでしょうが・・・。

 Loadpictureという関数は、ファイルを読み込んでいる関数です。

 前にもどこかで記述しましたが、ファイルI/Oを行う場合、Dir関数でファイルの存在確認だけでは
 不十分です。

 標準モジュールに

 sub test1()
    dim PIcPath as string
    PicPath="d:\aaa\bbb\ccc\xxx.jpg" '実際に存在する画像ファイルを指定してください
    If Dir(PicPath) = "" Then
       set Image1.Picture = nothing
    Else
       ActiveSheet.Image1.Picture = LoadPicture(PicPath)
    End If
 end sub

 上記例では、d:\aaa\bbb\ccc\xxx.jpg このファイルが別のプログラムで使用中(ロック)の場合、
 エラーになります。

 この手のことは、 On error 〜 ステートメントに任せましょう

 Sub test2()
    Dim PicPath As String
    PicPath = "d:\aaa\bbb\ccc\xxx.jpg"
    On Error Resume Next
    ActiveSheet.Image1.Picture = LoadPicture(PicPath)
    If Err.Number <> 0 Then
       MsgBox Err.Description
       Set Image1.Picture = Nothing
    End If
    On Error GoTo 0
 End Sub

 ichinose 


ichinoseさん、HANAさん、半平太さんありがとうございます。
 説明不足ですみません。

 まず、どこでエラーが出るのかですが、画像の無いところに飛ばすと

 実行時エラー’52’:ファイル名または番号が不正です 
 となり If Dir(PicPath) = "" Then が黄色く表示されます。

 >set Image1.Picture =nothing
 としても同じところでエラーが出ます。

 Range("台帳!AE8").Valueですが、ここには\A\B.jpgと画像を指定しています。

 >PicPath = ThisWorkbook.Path & "\" & Application.Range("台帳!AE8").Value
 こちらを記入してみると
 実行時エラー’75’:パス名が無効ですとなります。

 返事が遅くなりすみません。

 (しょう)


 > Range("台帳!AE8").Valueですが、ここには\A\B.jpgと画像を指定しています。
 >
 > >PicPath = ThisWorkbook.Path & "\" & Application.Range("台帳!AE8").Value
                  ↑
 上の方で\を補っているので、こちらの\は不要です。

 実状を明確にしてもらうと考え易いです
  Image1は、どのシートにあるのですか?
  マクロコードは、どのシートに書いてありますか?
  台帳シートは、上の二つとどの様な関係にありますか?(同じか、別か?)

 Image1とマクロコードが「台帳」シートに有るなら、
   PicPath = ThisWorkbook.Path & Range("AE8").Value

 無いなら
   PicPath = ThisWorkbook.Path & Worksheets("台帳").Range("AE8").Value

 (半平太) 2010/03/02 00:48

 こんな情報も有りましたが。。。
http://oshiete1.goo.ne.jp/qa3004948.html
 ===抜粋 ここから===
通常、Dir 関数は、引数で渡したフォルダ or ファイルが存在しないと
空白を戻しますが…
 
引数に、ネットワーク越しの共有フォルダ or ファイルを指定すると
アクセス可能な状態である場合は良いのですが、そうではない場合、
52 エラーになるようです。
 ===抜粋 ここまで===

 ThisWorkbook は何処に保存されているのでしょう?
 また、直接アドレスを入れてみるとどうでしょう?

 >画像の無いところに飛ばすと
 というのは、AE8に表示されているファイルが存在しない と言う事ですか?
 それとも、AE8にファイル名が表示されていない場合 ですか。。。?

 (HANA)

 衝突してしまいました。

ichinoseさん 半平太さんありがとうございます。

 真っ白なImage1がでました。
 半平太さんの言われる通りImage1とマクロコードが「台帳」シートに有り ”台帳!”を削除したところ
 エラーが出ませんでした。感動です!

 ichinoseさん 丁寧な説明をありがとうございます。まだ途中なのですが、こちらの方法でもトライします。

 1つの画像でしか試してませんが、これから4つの画像が表示できるよう頑張ってみます。
 とりあえず明日の仕事もありますので後日報告となります。

 

 HANAさんすいません。
 遅いかもしれませんが、画像がない場合はIf関数でAE8が空白になるよう設定してます。

 説明不足の疑問にお付き合いして頂きありがとうございました。
 図図しいですが今後もよろしくお願いします。

 (しょう)


 > 真っ白なImage1がでました。
 > 半平太さんの言われる通りImage1とマクロコードが「台帳」シートに有り ”台帳!”を削除したところ
 > エラーが出ませんでした。感動です!

 ええー?! それなら、当初ご提示のコードでもエラーにならないと思いますけど・・・

 訳が分からなくなったので、私は退散します。 m(__)m

 (半平太) 2010/03/02 09:22

 >ええー?! それなら、当初ご提示のコードでもエラーにならないと思いますけど・・・

 そうなんですか???
 皆さんが???の状態なんですね。

 今頃遅いのですが、台帳!AE8の部分には
 =IF($A$1="","",IF(VLOOKUP($A$1,Sheet2!$A$2:$AF$153,16,FALSE)=0,"",VLOOKUP($A$1,Sheet2!$A$2:$AF$153,16,FALSE)))

 VLOOKUPの関数がSheet2のセル情報を表示するため”台帳!”が引っかかってしまったのでしょうか?

 半平太さんありがとうございました。

 (しょう)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.