ここから本文です

Excel 2010 で Pictures.Insert メソッドを使用し、 jpg画像等を挿入すると、リン...

xx_********さん

2011/6/1312:22:47

Excel 2010 で Pictures.Insert メソッドを使用し、
jpg画像等を挿入すると、リンク オブジェクトとして挿入され、
元画像ファイルの移動や削除があると、
ワ-クシ-トに表示されなくなる回避策を教えてください。

上記の回避策については、

http://support.microsoft.com/kb/2396509/ja

で、Shapes.Add メソッドを使用したサンプル コードが、
紹介されているのですが、
このコ-ドを、コピ-し、
(Windows7環境下での)Excel 2010で、
何度か、画像ファイルを変え、
試したのですが、
図のサイズが元のサイズに戻らないようですし、
さらに挿入された画像の縦横比が、
1:1つまり同じサイズにしか、
なりません。

単純に、このコ-ドはコピ-して、使ってはいけないのか、
つまり、何らかの参照設定が他に必要なのでしょうか。

できれば、
アクテイブセルや(選択した)結合セルへ、
リンクを切った状態で、
かつ縦横比を維持した状態で、画像を挿入できる
方法があれば、お教え願えないでしょうか。
よろしくお願いします。

補足ご提示頂いたコ-ドを、試してみたのですが、
yama_ski_11さんのコ-ドでは、
セルの高さとセルの幅が、画像の縦横のサイズとなり、
元画像の縦横比に一致しない場合もあります。
ja7awuさんのコ-ドですと、
挿入画像が、縦長の画像になってしまいます。
なんとか、応用して解決したいのですが、
当方力不足ですので、
解決策のヒントなどありましたら、
さらに、ご提示をいただければ有難いです。

閲覧数:
16,492
回答数:
3
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

ja7********さん

編集あり2011/6/1406:01:58

---補足に対して---
あれっ 2010は違うんですね。 2003は元の縦横比になるんですが・・・
コードを入れ替えました。 これでどうですか?
縦に長い画像は、セル範囲の縦を合わせ、横に長い画像は、セル範囲の横幅を合わせているのですが・・・
あとは、2010が無いので、状態が分らず対処出来ません。
まぁ、これでダメならMSも2010の問題点として認識しているようですので、時期修正まで待ちましょう。Hi

---------
VBAのヘルプでAddPictureメソッド と ScaleHeight/ScaleWidthメソッドを調べましたか?
リンクのことは、解説を理解すれば、分ると思います。
例えば、画像の左上をセルB4の左上に合わせ、B4:E15(結合かは自由)の範囲に
貼り付ける とするとこんな感じです。
高さを合わせていますので、横幅は、縦/横比を守るためセル幅とは差が出ます。
これは、当然のことですね。つまり片方を合わせると他方は、自動的に決まるのです。
なお、Ver2010 では、テストしていません。
まぁまぁ~ だんだん、使い難くなりますね・・・ 買う気しませんね!!

Sub InsPict()
Dim objFileName As String
Dim objShape As Shape
Const Haichi = "B4:D15" ' <--貼付け位置
objFileName = Application.GetOpenFilename _
("Pictures (*.gif; *.jpg; *.bmp; *.tif),*.gif; *.jpg; *.bmp; *.tif", , "画像選択ダイアログ")
Set objShape = ActiveSheet.Shapes.AddPicture( _
Filename:=objFileName, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=Range(Haichi).Left, _
Top:=Range(Haichi).Top, _
Width:=50#, _
Height:=50#)
With objShape
.ScaleHeight 1!, msoTrue ' <-- 元の大きさに戻す
.ScaleWidth 1!, msoTrue
If .Height > .Width Then
.Height = Range(Haichi).Height ' <--高さを合わせる
Else
.Width = Range(Haichi).Width ' <-- 幅を合わせる
End If
End With
Set objShape = Nothing
End Sub

質問した人からのコメント

2011/6/14 20:10:49

補足までしていただき、ありがとうございました。

ja7awuさんがご提示していただいたコ-ドと、
http://oshiete.goo.ne.jp/qa/6527450.html
↑ こちらで回答されたコ-ドを、組合わせて、
若干修正追加し、実行しましたところ、
結合セルへの挿入が可能となりました。

URL先のコ-ドですと、元画像のサイズでの挿入が可能となり、
あとは、
ja7awuさんの配置先での縦横調整を応用したところ、
比率を維持しての挿入ができたようです。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

dre********さん

2011/6/1316:02:16

サイズを変えるか切り貼りすれば大丈夫みたいでした。
で、その後、
最初はたしかにリンクが切れたのですが、なぜかそのうちに元図を他へ移動しても
保存した後で読みだしてみるときちんと表示されるようになってしまい、新規Bookde再現できなくなりました。
(最初のリンク切れになったBookはすぐに削除してしまったので確認不能)
途中で一緒にインストールしてある2003版でも試したせいなのかもしれません。

Windows 7 、32ビット版です。
Office2010、(2003)

T.Mさん

2011/6/1313:52:23

事前にセル(または結合セル)の縦横比を画像の縦横比に一致させます。選択したセルのサイズに合わせた画像がリンクなしで貼り付けられます。ご希望のコードでしょうか。お試しください。
Sub InsPict()
Dim objFileName As String
Dim objShape As Shape
objFileName = Application.GetOpenFilename _
("Pictures (*.gif; *.jpg; *.bmp; *.tif),*.gif; *.jpg; *.bmp; *.tif", , "画像選択ダイアログ")
Set objShape = ActiveSheet.Shapes.AddPicture( _
Filename:=objFileName, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=Selection.Left, _
Top:=Selection.Top, _
Width:=Selection.Width, _
Height:=Selection.Height)
End Sub

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる