• 締切済み

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

みんなの回答

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.3

P8380107さん こんにちは。 > できれば2003と2007両方にそのまま使えるマクロ… EXCEL2003,2007でテストを行いましたが、どちらも同じ結果でしたよ。 ただ、P8380107さんが考えている上位置、左位置は勘違いしていました。 以下のように(.Top,.Left)を訂正すれば問題はないかと思います。    With Selection.ShapeRange                      '写真情報の    .Height = RH * SC * 0.995                    ' 高さを調整    .Width = RW * SC * 0.995                     ' 幅を調整    .Top = ST + (SH - RH * SC) / 2 + RH * SC * 0.005     ' 上端の位置を設定 ★    .Left = SL + (SW - RW * SC) / 2 + RW * SC * 0.005    ' 左端の位置を設定 ★  End With   EXCEL2003,2007の両方で確認してください。

P8380107
質問者

お礼

いろいろ時間を取らせたみたいで本当に申し訳ありません。 実は、No3の回答は今確認したところなんですが、 その前に、帰宅して2007でいろいろとやってまして、 私も「.Top =」の形にすればとりあえずうまくいくことを 発見したところでした。 ただ、まだ少し問題が残ってまして、 前に他でも類似の質問があったように記憶していますが、 実は今対象としているブックの当該シート内には、最大8枚の写真(当該マクロで貼付)と 6個のフォームコントロールのマクロボタン(そのうちの1個がこのマクロ)と 32個のオートシェイプで作ったマクロボタンが配置されています。 問題なのは、このマクロを実行すると、 マクロで同時に連続して貼り付けた7枚の写真(最後の1枚だけ正常)と もともと表示されていてマクロ内で触れていない32個のオートシェイプのマクロボタンが 少しだけずれて表示されてしまいます。 なんだかOSかEXCELか画面のコントロールのバグのようにも感じられ、オートシェイプ内の 文字だけはズレずに、枠と領域着色だけがずれます。 なお、これは何かの拍子(例えばブックを上書き保存しても)で正しい位置に勝手に 戻っているようです。 今後は、 もう少しだけ何とかならないか研究してみようと思っておりますが、 最終的に解決しなかったら、マクロ内にブック保存かなにかを入れようとも考えています。 それでは、とりあえず、 本当にありがとうございました。おかげさまで、解決の兆しが見えてきて本当に助かりました。

全文を見る
すると、全ての回答が全文表示されます。
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.2

画像が貼りついた位置が多分2003と違うのだと思います。 その位置を基準にせずに、セルの位置を基準にした方が良いと思います。 ★印が付いたステートメントが修正した箇所です。  ただ位置の式は間違っているかも知れませんので修正してください。 Sub PIC(SR, PN, SN)  SR.Select ' 写真貼付領域を選択  SH = Selection.Height   ' 貼付領域の高さ  SW = Selection.Width   ' 貼付領域の幅  ST = Selection.Top    ' 貼付領域の上位置 ★  SL = Selection.Left    ' 貼付領域の下位置 ★  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         ' 幅を調整    .Top = ST + RH * SC * 0.0025     ' 上端の位置を設定 ★    .Left = SL + RW * SC * 0.0025     ' 左端の位置を設定 ★  End With End Sub

P8380107
質問者

お礼

早速のご回答ありがとうございました。 ただ、 ご教授いただいた内容及びさらにいろいろと改造を試みてみましたが、 結局うまくいきませんでした。(今のところ、2003のみでチェック) 少なくとも2003では、 上端や左端位置の指定は、あくまでも選択領域の上左端が基準のようです。 なお、2007でのチェックは、夜にしか出来ませんので、 (職場に2007が載っているPCが無いため)確認次第改めて ご報告させていただきます。 また、最終的にどうしても2003と2007で文法等が違うのも 別の方法で解決可能だと思いますので、やむなしと考えています。 まずは、お礼まで。

P8380107
質問者

補足

質問の方に入力していませんでしたが、 できれば2003と2007両方にそのまま使えるマクロとしたいと思っております。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

直接的な回答ではありませんが、 ワタシの環境ではまだ2003までです 2007では画像貼り付け系がことごとくNGであったのを確認しています これは仕方が無いようです って ホント困りモノです 業務系の現在運用しているものを今後どうしようか アタマを悩ませています 複数の環境下で使われる為 現在は2003までとしていますが いずれは切り替えなくてはいけません しかしいっぺんには無理です ・・・。 はぁ

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルマクロでオブジェクトを選択する方法

    エクセル(2002)を使っています。マクロの記録機能を使って円を描くマクロを作成しました。 Sub Maru(xpos, ypos, hankei) ActiveSheet.Shapes.AddShape(msoShapeOval, xpos, ypos, hankei, hankei).Select Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Fill.Solid Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.ForeColor.SchemeColor = 64 Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255) End Sub 次にこの円を削除したいと思い、同じようにマクロの記録機能を使ったところ、 Sub Macro3() ActiveSheet.Shapes("Oval 64").Select Selection.Delete End Sub となりました。"Oval 64"はオブジェクトの名前のようですが、名前がわかっていないオブジェクト(但し上記マクロで書いたので場所はわかっている)を選択するにはどうしたらいいでしょうか。

  • Excel-VBA コメントの書式設定

    Excel-VBA コメントの書式設定 コメントの書式設定をExcel-VBAで定義したい。 従い「マクロの記録」を実行して下記のソースコードを取得しました。 これを実行すると次の実行エラーが発生しました!? ★正常に動作させるソースコードの事例をいただければ幸いです。 ご指導よろしくお願いいたします。 実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。 Sub Macro1() ' 処理:マクロの記録 ' 目的:「コメントの挿入」と「コメントの書式設定」をする。 Range("A2").Select Range("A2").AddComment Range("A2").Comment.Visible = False Range("A2").Comment.Text Text:="コメント" & Chr(10) & "今日は良いお天気ですね。" '▽次で実行エラーが起きる!? Selection.ShapeRange.ScaleWidth 1.58, msoFalse, msoScaleFromTopLeft Selection.ShapeRange.ScaleHeight 1.49, msoFalse, msoScaleFromTopLeft Selection.ShapeRange.Fill.Visible = msoTrue Selection.ShapeRange.Fill.Solid Selection.ShapeRange.Fill.ForeColor.SchemeColor = 9 Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0) Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255) Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Height = 141.75 Selection.ShapeRange.Width = 283.5 Range("A1").Select End Sub

  • エクセル2007でマクロを使った写真挿入がうまくいきません。

    エクセル2007でマクロを使った写真挿入がうまくいきません。 エクセル2003で使っていたひな形をもらったのですが2007では結合したセルから ずれてしまいます。 どうすれば位置の修正をできますか? また、結合した大きなセルの中にフォームボタンを付けいるのですが 2003では写真が挿入されるとボタンは隠れてしまっていたのですが、 2007では挿入した写真に重ねって写真が見ずらいです。 隠すことはできるのでしょうか? なにぶん初心者なのでお願いします。 Sub Pic_in() ' マクロ記録日 : 2003/7/1 kome fname = Application.GetOpenFilename ActiveSheet.Pictures.Insert(fname).Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 247.5 Selection.ShapeRange.Width = 350 End Sub

  • EXCELのVBAによる写真貼り付け時に重なる。

    VBAの初心者です。 エクセルに写真データを貼り付けるVBAで、以下のマクロを実行するとシートの同じセル位置B5に、写真が2枚重なった状態となります。 セルのB5とH5の位置に写真をそれぞれ貼りつけるために、どのように修正すればよいのでしょうか?ご教授ください。 OS:Vista ソフト:Excel2007 Sub 写真ファイル呼び出し() ' Sheets("風景1").Select Range("B5").Select ActiveSheet.Pictures.Insert(Worksheets("風景写真").Range("o4").Value).Select With Selection Selection.ShapeRange.LockAspectRatio = msoTrue '縦横比を固定するコマンド Selection.ShapeRange.Width = 245 '縦横比固定、幅のみを指定する End With 'Sheets("風景2").Select Range("H5").Select ActiveSheet.Pictures.Insert(Worksheets("風景写真").Range("o5").Value).Select With Selection Selection.ShapeRange.LockAspectRatio = msoTrue '縦横比を固定するコマンド Selection.ShapeRange.Width = 245 '縦横比固定、幅のみを指定する End With End Sub

  • エクセル マクロ picture

    教えてもらいながら以下のような画像貼り付けマクロを組んだのですが,以下の点に引っかかり前進することができません. 教えて頂きたいと思い投稿しました. 躓いている点  シート内でボタンを利用して貼り付け及び削除をしているのですが,エクセルシート内でコピペするたびに「Selection.Name」と貼り付け先を修正しています. →これをコピペしても修正をしなくてもよいマクロはないでしょうか? 自作作成マクロ Sub 写真貼付1_Click() Dim AA As String, BB As String, CC As String 10 AA = InputBox("参照先を指定して下さい。例:D:\Photo001.jpg", "場所指定", AA) If (AA = "") Then AA = Application.GetOpenFilename(Title:="写真ファイルの場所はどこですか?") GoTo 10 End If ActiveSheet.Unprotect Range("m29").Select ActiveSheet.Pictures.Insert(AA).Select Selection.Name = "写真1" Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Height = 310 Selection.ShapeRange.Width = 310# Selection.ShapeRange.IncrementLeft 1 Selection.ShapeRange.IncrementTop 1 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True End Sub -------------------------------------------------- Sub 写真削除1_Click() ActiveSheet.Shapes("写真1").Select Selection.Delete ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True End Sub ところどころ端折ってますが,以上のようなマクロです. よろしくお願いします.

  • VBAで画像を自動で切り替える方法

    Excelで棚割表を作っています。商品コードを打つとその商品の画像を自動で表示させたいのですが、雑誌を見ながらコードをアレンジしてほぼ完成したのですが、「プロシージャーが大きい」とエラーが出てマクロを実行出来ません。 画像は100個程度あり、先に別のマクロで貼り付けてあります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ファイル As String If Intersect(Target, Range("A4")) Is Nothing Then ActiveSheet.Shapes("画像").Delete ファイル = "C:\保存場所\" & Range("A4").Value & ".jpg" Range("B5").Select ActiveSheet.Pictures.Insert(ファイル).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Top = ActiveCell.Top Selection.ShapeRange.Left = ActiveCell.Left Selection.ShapeRange.Height = 97 Selection.ShapeRange.Width = 52.5 Selection.ShapeRange.Rotation = 0# Selection.ShapeRange.IncrementLeft 1.5 Selection.ShapeRange.IncrementTop 1.5 Selection.Name = "画像" End If (中略) Dim ファイル98 As String If Intersect(Target, Range("U60")) Is Nothing Then Exit Sub ActiveSheet.Shapes("画像98").Delete ファイル98 = "C:\保存場所\" & Range("U60").Value & ".jpg" Range("V61").Select ActiveSheet.Pictures.Insert(ファイル98).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Top = ActiveCell.Top Selection.ShapeRange.Left = ActiveCell.Left Selection.ShapeRange.Height = 97 Selection.ShapeRange.Width = 52.5 Selection.ShapeRange.Rotation = 0# Selection.ShapeRange.IncrementLeft 1.5 Selection.ShapeRange.IncrementTop 1.5 Selection.Name = "画像98" End Sub 省ける箇所や分割する方法などありましたら教えてください。

  • エクセルVBA・画像を張り付けるコードについて

    次のような目的で以下のコードを作成しました。 1.オリンパス社のカメディアマスターというソフトで複数の画像を表示 2.希望の画像を選択してコピー 3.B1に希望の画像を一定サイズで張り付ける sub 画像貼付 () Range("B1").Select ActiveSheet.Paste Selection ShapeRange.Height 200 Selection ShapeRange.Width 200 End Sub 今回、ご教授したいのは次のとおりです。 上記で2つ目以降の画像を別のシートに貼り付ける際、誤ってカメディアソフト上で画像を選択しないでマクロを実行すると、前回の画像が貼り付いてしまいます。 これを何らかの方法で防ぎたいのです。 よろしくお願いします。

  • エクセルに画像を貼付け縮小する作業をマクロにしたいのですが、

    エクセルに画像を貼付け縮小する作業をマクロにしたいのですが、 分からない部分があって困ってます。 (1)挿入したいセルにカーソルを合わせる (2)マクロ  挿入-図-ファイル-図の挿入-図の書式設定-サイズ-30% この作業を覚えさせると以下になりました。 Sub Macro3() ActiveSheet.Pictures.Insert("C:\Documents and Settings\デスクトップ\1.JPG") _ .Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Height = 360# Selection.ShapeRange.Width = 480# Selection.ShapeRange.Rotation = 0# End Sub これだと、写真が指定されてしまいます。 マクロの途中で止まって任意の写真を都度選べるようにできますか? 膨大な量の写真をセルに並べていきたいのです。

  •  エクセルに写真を挿入するマクロを組んでいます。

     エクセルに写真を挿入するマクロを組んでいます。 2003までは問題なく動作していたマクロが、 2007では位置調整がうまく行きません。  そこでネットで検索して With Selection .Left = Range("C6").Left .Top = Range("C" & rowa).Top End With のように Selection.Left を使えば解決するとありましたが、 (1)WIN VISTAのエクセル2007では おなじひとつのエクセルファイルの あるシートではコード通りが位置でるのに 違うシートでは縦位置がずれる。 (2)WIN XPのエクセル2007では すべてのシートで縦位置がずれる。 ただし、ずれの位置は(1)よりは少ない。 といずれのOSでも不具合が出ます。  事情によりエクセル2007でこのマクロを使用しなければならなくなり 非常に困っております。 どなたか解決方法をご存知の方、よろしくお願いします。  なお、(2)のWIN XPでは、エクセル2003も入っており、 その中では、全く問題なくマクロが動作しています。 実際のコードは下の通りです。 Sub 写真呼出(koumoku, jpgf, tr As Variant) Dim rowa As String ActiveWindow.ScrollColumn = 1 ActiveWindow.ScrollRow = tr ←選択したセルの行ナンバー ActiveSheet.Pictures.Insert(motopath & "写真\" & koumoku & "\" & jpgf & ".JPG").Select Selection.Name = "写真" Selection.ShapeRange.LockAspectRatio = msoTrue '縦横比の固定 Selection.ShapeRange.Height = 480 'Selection.ShapeRange.IncrementLeft 100 ←不具合が出たので止めた部分 'Selection.ShapeRange.IncrementTop 40  ←不具合が出たので止めた部分 rowa = tr + 2 With Selection .Left = Range("C6").Left .Top = Range("C" & rowa).Top End With End Sub

  • Word2007マクロ

    宜しくお願い致します Word2007でこんな事が出来ますか Excel2007で線路を作るマクロを作成しました(本を見て) これをWordでも使用したいのですが、Excelのマクロそのまま WordのVisual Basicに書き込んでもエラーが出て機能しません Excelのマクロは以下です Sub 線路作成() 上端位置 = Selection.Top 左端位置 = Selection.Left  Selection.ShapeRange.Line.Weight = 6# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Duplicate.Select Selection.ShapeRange.IncrementLeft -18# Selection.ShapeRange.IncrementTop 9.6 Selection.ShapeRange.Line.DashStyle = msoLineDash Selection.ShapeRange.Line.Weight = 4.5 Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.ForeColor.SchemeColor = 9 Selection.ShapeRange.Line.Visible = msoTrue Selection.Top = 上端位置 Selection.Left = 左端位置 End Sub Wordで使えるようにするには、どこを直せばよいでしょうか。

このQ&Aのポイント
  • 世の中、お正月でゆったりしている時期だが、幼児、児童を虐待から守る。あるいは学校でのいじめを無くす動きは表面的にはあるようにも見える。しかし、影に隠れている虐待やいじめは無くならない。
  • 国会での虐待防止法案が可決されても、虐待をする親には、関係のない話。虐待が日常化すると、それが当然であり正しく思える。また、いじめが日常化すると、目立つ奴が悪い。病気を持っている奴が悪い。元気のない奴が悪い。という意味不明な理屈をこねる。
  • 人間社会が、歴史を通して作ったものに法律があるが、それを蔑ろにして、喧嘩に勝ったものが正しい。と言い出したら、他になにもいらなくなる。問題を解決する手段として、暴力、暴言で勝てばそれで正しい。ということなれば、法律もいらない、体力のあるものが正しいとなる。
回答を見る