[[20110117143927]] 『マクロを使ってExcel2010で作ったファイルを』(msd) ページの最後に飛ぶ

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

 

『マクロを使って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.