[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロを使ってExcel2010で作ったファイルをExcel2003で開くと画像が表示しません><』(msd)
Excel2010で作ったファイルをExcel2003で開くと画像が表示しません><
画像挿入マクロでExcel2003と2010の動作の違いについて御教授願います。
画像を挿入したいセル範囲をドラッグして選び右クリックして画像を選ぶと画像が挿入されるクリックイベントを皆さんの知恵をお借りしながら作って使っていたのですが、今度事務所に新しいPCが入りそのPCで作業したら同じ動作をしてくれません><
新しいPC(Excel2010)で作ったファイルを事務所の他のPC(Excel2003)でみると小っちゃい四角だけ角に出て画像が表示されません。
Excel2003でこのマクロを使って作るとちゃんと画像挿入されるのですがExcel2010でつくると挿入ではなくリンク?してるみたいになってしまいます。
他のPCで見ても画像を表示できる様にしたいのですがExcel自体の設定があるのですか?
解決策がお解かりになる方がいらっしゃいましたらどうか御教授ねがいます。
一応コードも載せておきます↓
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean) Dim sp As Integer, i As Integer If Intersect(Target, Range("B4:F483")) Is Nothing Then Exit Sub With Target Cancel = True myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then Exit Sub End If For Each mySP In ActiveSheet.Shapes myAD1 = mySP.TopLeftCell.MergeArea.Address myAD2 = Target.Address If myAD1 = myAD2 Then mySP.Delete Next Set mySP = ActiveSheet.Pictures.Insert(myF) myHH = Target.Height / mySP.Height myWW = Target.Width / mySP.Width If myHH > myWW Then mySP.Height = mySP.Height * myWW mySP.Width = Target.Width Else mySP.Height = Target.Height mySP.Width = mySP.Width * myHH End If Set mySP = Nothing End With End Sub
です。
よろしくお願いいたします。
2010の環境が無いのでわかりませんが2007でもPictures.Insertで問題が出る事があるようです。 以下のように修正してみてどうなりますか?
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean) Dim myF As Variant, mySP As Shape If Intersect(Target, Range("B4:F483")) Is Nothing Then Exit Sub Cancel = True myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then Exit Sub For Each mySP In ActiveSheet.Shapes If Not Application.Intersect(Target, mySP.TopLeftCell.MergeArea) Is Nothing Then mySP.Delete End If Next mySP With Me.Shapes.AddPicture(myF, msoFalse, msoTrue, Target.Left, Target.Top, 1, 1) .ScaleHeight 1, msoTrue .ScaleWidth 1, msoTrue .LockAspectRatio = msoTrue .Height = Target.Height If .Width > Target.Width Then .Width = Target.Width End If End With End Sub
(momo)
(msd)
画面の表示倍率はどうなっています? セルは結合セルですか?
でも2007では普通なので2010特有なのですかね? (momo)
Microsoftの対応も私のと同じような内容ですね。 http://support.microsoft.com/kb/2396509/ja (momo)
試してみた結果なのですが、画像はリンク状態ではなく、ちゃんと他のPCでも確認出来るようになりました^^
画像が拡大されたみたいになってしまうのにはどう説明すればいいのか^^;
セルは結合セルはありません。
Microsoftの対応を読ませていただきましたが私ではコードを組みなおす知識が足らないみたいで理解に苦しんでしまいます。
試してみましたがコードはエラーになるばかりで走ってさえくれません^^;
リンク状態は治ったけど画像が大きいままという事ですか?
.Height = Target.Height If .Width > Target.Width Then .Width = Target.Width End If
の部分を、msdさんの元のコードに近い形で
myHH = Target.Height / .Height myWW = Target.Width / .Width If myHH > myWW Then .Width = Target.Width Else .Height = Target.Height End If
に変更してみるとどうでしょうか? (momo)
画像の大きさは選択範囲内に納まってはいるのですが、その画像が一度拡大してから一部を切り取って貼り付けた様な感じでぼやけた(ピンボケしてる様な)画像が貼り付けられます。
工学ズームをしたみたいな感じになっていて元の写真のどの部分かもわからないくらいの状況です。
説明が下手ですいません。
掲示していただいたコードは2003と2007で試してみましたが、そちらでは正常に(思った様に)動いてくれるので2010特有見たいです><
ってか2010特有ってのがたちが悪いですよね><
2010は使ったこと無いから新しいPC買うなら何があるかわからないから2010はやめてくれって言ったのですが、新しい方がいいだろって2010が入ってるのを買ってこられてこのざまです;;
そうですかぁ・・・ 試しに > With Me.Shapes.AddPicture(myF, msoFalse, msoTrue, Target.Left, Target.Top, 1, 1) の部分を
With Me.Shapes.AddPicture(myF, msoFalse, msoTrue, Target.Left, Target.Top, 10000, 10000)
のように最後の2つのパラメータを大きい数字にしてみるとどうでしょうか? (momo)
試してみた結果縦横比は変ってしまうものの選択範囲内に画像が入れられるようになりました^^
そしてリンクオブジェクトではなくちゃんと挿入になっているので他のPCで見ても画像が表示されました^^
説明が下手で解りづらいなか親身にお答えいただきありがとうございます。
これなら何とか使う事ができます^^
最後の
With Me.Shapes.AddPicture(myF, msoFalse, msoTrue, Target.Left, Target.Top, 10000, 10000)
に変えるってのはどういう意味合いになるのでしょうか?
意味が理解できなかったもので疑問に思ってしまって^^;
今回試した画像がたまたま選択範囲いっぱいだったみたいでした^^;
他の画像で試してみたら縦横比もちゃんと保持されていました。
本当にありがとうございました。
(msd)
最初にサイズを設定しないといけないのですが、読み込む段階では 元の画像のサイズがわからないので1,1と小さいサイズにしていました。 2007ではこれで問題なかったのですが2010では拡大表示になるという事で もしかしたら最初のサイズが影響しているのかな?と思ったので 最初にとても大きなサイズにしておいて後で小さくする方法ならどうだろ? と思ったので変更してみました。
うまく出来てよかったです。^^ (momo)
親身にお答えいただき本当にありがとうございました^^
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.