- 締切済み
EXCEL2007 VBAで選択領域に写真を表示できません。
EXCEL2007 VBAで選択領域に写真を表示できません。 どなたか教えてください。使用OSはVistaでEXCEL2007を使用しています。 2003では正常に表示されていた、そのままの内容のマクロを使用しているのですが、 なぜか、写真が指定した位置に貼り付きません。 2003と2007では何かが違っていて、別の内容のマクロにしなければならないのでしょうか? 実際のマクロを以下に記します。このマクロの内容は、 マクロの実行中に貼り付ける写真ファイルを指定して、マクロ実行前に選択していた領域の中 に写真を貼付け、縦幅と横幅から計算した縮尺で、サイズを調整して領域の中央にちょうど収 まるようにしています。 2007では、表示される位置は違いますが、サイズ調整だけはうまくいっているようです。 厚かましいお願いで申し訳ありませんが、どうぞよろしくお願いいたします。 Sub TEST() ' Dim SR As Range, PN As String, SN As String Set SR = Selection PN = Application.GetOpenFilename("写真ファイル(*.jpg),*.JPG", 2, _ "写真ファイルの指定", , False) Call PIC(SR, PN, SN) 'Range("SHAPENAME").Cells(1, 1) = SN ' 後で消すためのシェイプ名をシート内に記入 ' End Sub Sub PIC(SR, PN, SN) ' SR.Select ' 写真貼付領域を選択 SH = Selection.Height ' 貼付領域の高さ SW = Selection.Width ' 貼付領域の幅 ActiveSheet.Pictures.Insert(PN).Select ' 写真ファイル貼付 SN = Selection.ShapeRange.Name ' シェイプの名前を記録 RH = Selection.ShapeRange.Height ' 写真情報の高さ RW = Selection.ShapeRange.Width ' 写真情報の幅 S1 = SH / RH ' 高さから決まる縮率 S2 = SW / RW ' 幅から決まる縮率 SC = WorksheetFunction.Min(S1, S2) ' 縮率の最小値 With Selection.ShapeRange ' 写真情報の .Height = RH * SC * 0.995 ' 高さを調整 .Width = RW * SC * 0.995 ' 幅を調整 .IncrementTop (SH - RH * SC) / 2 + RH * SC * 0.005 ' 上端の位置を調整 .IncrementLeft (SW - RW * SC) / 2 + RW * SC * 0.005 ' 左端の位置を調整 End With ' End Sub
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- jcctaira
- ベストアンサー率58% (119/204)
- jcctaira
- ベストアンサー率58% (119/204)
- aloha88600
- ベストアンサー率17% (10/58)
お礼
いろいろ時間を取らせたみたいで本当に申し訳ありません。 実は、No3の回答は今確認したところなんですが、 その前に、帰宅して2007でいろいろとやってまして、 私も「.Top =」の形にすればとりあえずうまくいくことを 発見したところでした。 ただ、まだ少し問題が残ってまして、 前に他でも類似の質問があったように記憶していますが、 実は今対象としているブックの当該シート内には、最大8枚の写真(当該マクロで貼付)と 6個のフォームコントロールのマクロボタン(そのうちの1個がこのマクロ)と 32個のオートシェイプで作ったマクロボタンが配置されています。 問題なのは、このマクロを実行すると、 マクロで同時に連続して貼り付けた7枚の写真(最後の1枚だけ正常)と もともと表示されていてマクロ内で触れていない32個のオートシェイプのマクロボタンが 少しだけずれて表示されてしまいます。 なんだかOSかEXCELか画面のコントロールのバグのようにも感じられ、オートシェイプ内の 文字だけはズレずに、枠と領域着色だけがずれます。 なお、これは何かの拍子(例えばブックを上書き保存しても)で正しい位置に勝手に 戻っているようです。 今後は、 もう少しだけ何とかならないか研究してみようと思っておりますが、 最終的に解決しなかったら、マクロ内にブック保存かなにかを入れようとも考えています。 それでは、とりあえず、 本当にありがとうございました。おかげさまで、解決の兆しが見えてきて本当に助かりました。