[[20170130105203]] 『ファイル名でJPEGデータを参照したい』(ちゃー) ページの最後に飛ぶ

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

 

『ファイル名でJPEGデータを参照したい』(ちゃー)

AB1セルに整理番号
P4,X4<P20,X20各セルにAB1セルを参照し「整理番号-1、2,3,4」と表示しています。
フォルダ内のjpegの名前はP4,X4<P20,X20と同じにしています。

シートを複数作成し、整理番号を変更したら写真データが変わるようにしたいです。
マクロ初心者で、検索して下記のように切貼りしましたが、まったく動きません。
教えてください。

Sub macro1()
Dim p As String
Dim h As Range

'写真の保存場所
p = "C:\Test\image\"
'現在表示されている写真は一度削除
ActiveSheet.Pictures.Delete
'商品名が入力されているセル
For Each h In Range("P4,P20,X4,X20" )
'写真ファイルが保存されている時
If Dir(p & h) <> "" Then
With ActiveSheet.Pictures.Insert(p & h)
'写真ファイル名が入力されているセルに挿入
.Top = h.Offset(0, 0).Top
.Left = h.Offset(0, 0).Left
'写真サイズの設定
.Width = h.Offset(0, 1).Width
.Height = h.Offset(0, 1).Height
'リンク貼付画像を切り取る
.Cut
End With
'写真ファイル名が入力されているセルを選択
h.Offset(0, 0).Activate
'画像をExcelシート自体に貼付
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
End If
Next
End Sub

< 使用 Excel:Excel2016、使用 OS:Windows7 >


 セルの中身は hoge ですよね。 で、実際のファイル名は hoge.jpg とか hoge.gif とか
 拡張子がついていますね。

 Dir で hoge だけを指定しても、そんな名前のファイルはどこにもないので空振りします。

 ところで、リンク貼り付けを避けるために Pictures.Insert のあと 切り取り、ペーストでも
 もちろんいいのですが 最初から AddPicture でリンクなし挿入をしたほうがよろしいのでは?

 学校内全文検索で AddPicture で検索するとコード例がたくさん見つかりますよ。

 あと、.Top = h.Offset(0, 0).Top ですか? (まぁ、それでいいならいいのですが)
 もし、本当に .Top = h.Offset(0, 0).Top でいいなら .Top = h.Top にしましょう。
 Offset を付ける意味がないので。

(β) 2017/01/30(月) 11:45


画像ファイルの拡張子を書いていないからですね。 ステップ実行すると、Dirの条件内に入らない事が判るかと思います。
以下のようにすると動くようになりますが、画像サイズが小さくないですかね?

 Sub macro1()
    Dim p As String
    Dim h As Range
    Dim cFile As String

    p = "C:\Test\image\"                            '写真の保存場所

    ActiveSheet.Pictures.Delete                     '現在表示されている写真は一度削除
    For Each h In Range("P4,P20,X4,X20")            '商品名が入力されているセル
        cFile = p & h & ".jpg"
        If Dir(cFile) <> "" Then                    '写真ファイルが保存されている時
            With ActiveSheet.Pictures.Insert(cFile)
                .Top = h.Offset(0, 0).Top           '写真ファイル名が入力されているセルに挿入
                .Left = h.Offset(0, 0).Left
                .Width = h.Offset(0, 1).Width       '写真サイズの設定
                .Height = h.Offset(0, 1).Height
                .Cut                                'リンク貼付画像を切り取る
            End With
            h.Offset(0, 0).Activate                 '写真ファイル名が入力されているセルを選択
            ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False        '画像をExcelシート自体に貼付
        End If
    Next
End Sub
(???) 2017/01/30(月) 11:50

(β) 様

ありがとうございます。
セルに.jpgをつければいいんですね!
やってみます。

.Top = h.Offset(0, 0).Top これは、探してきたのが、隣のセルを参照するものだったので
0に変更してつかってました。
ありがとうございます。
(ちゃー) 2017/01/30(月) 12:06


(???) 様

丁寧に書いて頂きありがとうございます。
やってみます!

画像サイズですが、よくわかっていなくてすみません。
セルの大きさよりちょっと小さくなるって感じかとおもっていました。
(セルは結合しています)
小さいですか?

(ちゃー) 2017/01/30(月) 12:10


まぁ、動くようになれば判ると思いますが、結合していない1セルのサイズに合わせて縮小してしまうようですよ。
結合したセルに合わせるならば、以下。

                .ShapeRange.LockAspectRatio = msoFalse
                .Top = h.Top                        '写真ファイル名が入力されているセルに挿入
                .Left = h.Left
                .Width = h.MergeArea.Width          '写真サイズの設定
                .Height = h.MergeArea.Height
(???) 2017/01/30(月) 13:30

(???) 様

ありがとうございました!!
サイズもすべて問題なく動くようになりました。
たいへん助かりました

(ちゃー) 2017/01/30(月) 13:38


コメント返信:

[ 一覧(最新更新順) ]


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