VBAの修正に関する質問

このQ&Aのポイント
  • VBAで作成した写真の一括貼り付けプログラムが、他のPCでは正常に動作しない問題が発生しています。知人にも解決策が分からず困っています。
  • 写真をアルバムに貼り付ける際に、セルの結合を利用しています。また、フォルダ内の写真を番号順に並べて貼り付ける機能も実装しています。
  • 修正のご指導をお願いします。また、フォルダの選択や画像の削除も行えるようにしています。
回答を見る
  • ベストアンサー

VBAの内容の修正をお願いさせて頂きます

VBAの内容の修正をお願いしたく質問させて頂きます。 知人にExcel2007でシートのアルバムに写真をクリックで貼り付けられ、また別に張り付けてあるボタンでフォルダーを選択するとフォルダー内の写真を一括貼り付けるVBAを作成してもらいました。 ところがExcel2013で作成したものは他のPCで見られず、『リンク先が分からない・・・』と言った内容のメッセージが表示されます。 張り付けたボタンをクリックすると、フォルダーの選択はできますが、その後 『実行時”1004”  PicturesクラスのInsertプロパティを取得できません』と言うメッセージが出ます。 残念ながら知人もよくわかりません。 表示内容がお分かりの方はぜひとも修正のご指導をお願いします。 写真のアルバムはA4サイズに横2×縦4の8枚を並べています。セルの結合が8枚あり、その場所をクリックすることで1枚1枚貼り付けることができます。 また、VBAでフォルダ内で番号順に並んでいる写真がばらばらに貼りついて今します。その部分も分かりましたら、よろしくお願いします。 VBA 左上表示:(General) 右上表示:画像貼り付け Sub 画像貼り付け() '===============フォルダ選択 Set myPath = CreateObject("Shell.Application") _ .BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, 0) If myPath Is Nothing Then Exit Sub If myPath.Items Is Nothing Then Exit Sub If myPath.Items.Item Is Nothing Then Exit Sub フォルダ = myPath.Items.Item.Path Set myPath = Nothing '===============画像の掃除 ' For Each mySP In ActiveSheet.Shapes ' myAD1 = mySP.TopLeftCell.MergeArea.Address ' myAD2 = Target.Address ' If myAD1 = myAD2 Then mySP.Delete ' Next 元シト = ActiveSheet.Name セル = Array("C4", "AO4", "C21", "AO21", "C38", "AO38", "C55", "AO55") i = 8 Set myFS = CreateObject("Scripting.FileSystemObject") For Each myF In myFS.GetFolder(フォルダ).Files myEXT = LCase(myFS.GetExtensionName(myF)) If myEXT = "jpeg" _ Or myEXT = "jpg" _ Or myEXT = "gif" _ Or myEXT = "tiff" _ Or myEXT = "bmp" _ Or myEXT = "png" _ Or myEXT = "tif" Then If i > 7 Then i = 0 Sheets(元シト).Copy after:=Sheets(Sheets.Count) End If '===============画像の貼り付け Set mySP = ActiveSheet.Pictures.Insert(myF) myMA = Range(セル(i)).MergeArea.Address '===============タテヨコの縮尺を保持 myHH = Range(myMA).Height / mySP.Height myWW = Range(myMA).Width / mySP.Width If myHH > myWW Then mySP.Height = Range(myMA).Height mySP.Width = Range(myMA).Width Else mySP.Height = Range(myMA).Height mySP.Width = Range(myMA).Width End If '===============中央へ調整 myHH2 = (Range(myMA).Height / 2) - (mySP.Height / 2) myWW2 = (Range(myMA).Width / 2) - (mySP.Width / 2) mySP.Top = Range(myMA).Top + myHH2 mySP.Left = Range(myMA).Left + myWW2 Set mySP = Nothing i = i + 1 End If Next Set myFS = Nothing End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

答えを回答するとすれば、こんな感じかな~。 以下の2ヶ所を変更しています。 「'▼修正箇所(1)▼ ~ '▲▲▲▲▲▲▲」 「'▼修正箇所(2)▼ ~ '▲▲▲▲▲▲▲」 (変更前のコードはコメントアウトしています) (1)箇所目はNo1で記述したAddPictureを利用する方法に変更 (2)箇所目は質問コードの縦横比率の保持処理が変だったので修正 あと質問のエラーについてはmyFがVariantだからです。 ファイルパスをCstrで文字列へ変換すればエラー回避できるかと。 (修正(1)に含みます) 【追記】 エクセルのVBAは型宣言を省略しても動作しますが、 宣言しないで使用すると変数の型が混雑しますので やはり宣言はしたほうがよいかと。(今回はしていませんが) No2の方がおっしゃっていますが、先頭にTAB入れてても OKWebに張り付けると先頭の空白行は無視されるんですよね(;_; (よって今回コードも詰まっていますが、ご愛嬌。) ■以下修正後のコードです入替えてください Sub 画像貼り付け() '===============フォルダ選択 Set myPath = CreateObject("Shell.Application") _ .BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, 0) If myPath Is Nothing Then Exit Sub If myPath.Items Is Nothing Then Exit Sub If myPath.Items.Item Is Nothing Then Exit Sub フォルダ = myPath.Items.Item.Path Set myPath = Nothing '===============画像の掃除 ' For Each mySP In ActiveSheet.Shapes ' myAD1 = mySP.TopLeftCell.MergeArea.Address ' myAD2 = Target.Address ' If myAD1 = myAD2 Then mySP.Delete ' Next 元シト = ActiveSheet.Name セル = Array("C4", "AO4", "C21", "AO21", "C38", "AO38", "C55", "AO55") i = 8 Set myFS = CreateObject("Scripting.FileSystemObject") For Each myF In myFS.GetFolder(フォルダ).Files myEXT = LCase(myFS.GetExtensionName(myF)) If myEXT = "jpeg" _ Or myEXT = "jpg" _ Or myEXT = "gif" _ Or myEXT = "tiff" _ Or myEXT = "bmp" _ Or myEXT = "png" _ Or myEXT = "tif" Then If i > 7 Then i = 0 Sheets(元シト).Copy after:=Sheets(Sheets.Count) End If '===============画像の貼り付け '▼修正箇所(1)▼ Set mySP = ActiveSheet.Shapes.AddPicture(CStr(myF), False, True, 0, 0, 0, 0) mySP.ScaleHeight 1, msoTrue mySP.ScaleWidth 1, msoTrue 'Set mySP = ActiveSheet.Pictures.Insert(myF) '▲▲▲▲▲▲▲ myMA = Range(セル(i)).MergeArea.Address '===============タテヨコの縮尺を保持 '▼修正箇所(2)▼ myHSP = mySP.Height / mySP.Width myHMA = Range(myMA).Height / Range(myMA).Width If myHMA >= 1 Then mySP.Width = Range(myMA).Width If myHSP < myHMA Then mySP.Height = mySP.Width * myHSP Else mySP.Height = mySP.Width * myHMA End If Else myHSP = mySP.Width / mySP.Height myHMA = Range(myMA).Width / Range(myMA).Height mySP.Height = Range(myMA).Height If myHSP < myHMA Then mySP.Width = mySP.Height * myHSP Else mySP.Width = mySP.Height * myHMA End If End If 'myHH = Range(myMA).Height / mySP.Height 'myWW = Range(myMA).Width / mySP.Width 'If myHH > myWW Then ' mySP.Height = Range(myMA).Height ' mySP.Width = Range(myMA).Width 'Else ' mySP.Height = Range(myMA).Height ' mySP.Width = Range(myMA).Width 'End If '▲▲▲▲▲▲▲ '===============中央へ調整 myHH2 = (Range(myMA).Height / 2) - (mySP.Height / 2) myWW2 = (Range(myMA).Width / 2) - (mySP.Width / 2) mySP.Top = Range(myMA).Top + myHH2 mySP.Left = Range(myMA).Left + myWW2 Set mySP = Nothing i = i + 1 End If Next Set myFS = Nothing End Sub

negirom
質問者

お礼

本当に!本当に!感謝!感謝!ありがとうございます!m(_ _)m 本来であれば自分で勉強をして、理解して作業をしなければいけないこと思いますが・・・できません。^^; 知人も過去にどこかのサイトから引っ張ってきて作った様で理解もしていません。--; そうは言っても仕事で非常に重宝しており困っていました。 本当に『教えて!』の目的そのもののご回答をいただきました。 他力本願で非常によくないことは感じていますが・・・・^^; 兎にも角にも本当にありがとうございました!m(_ _)m 失礼承知で、また質問させて頂く事もあるかと思います。よろしくお願いいたします。^^/

その他の回答 (2)

回答No.2

http://www.excel.studio-kazu.jp/kw/20100520162047.html 同じ質問? 当方、Excel2003のため とりあえず、1行1行ステップイン[F8」で確認。 データが全てちゃんと入っているか、下のウィンドウで確認して下さい。 myFにしっかりした値が入っていないということが考えられそうです。 Tabで分けてもらわないと、プログラムが見難いです。 1. しっかり変数定義がされていない。 全部全部そうですが、どこに定義されてるんです? Dim ●● As String とか。 2013は変数定義は必要ないということで? 2. If のあと、 End IF で閉じられてない。 If myPath Is Nothing Then Exit Sub の後とかもそうですが どこにEnd if があるんですか? これで、エラーが出ないというのもおかしな話。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

エクセルのバージョンで2010から「Pictures.Insert」を用いて画像を挿入した場合 リンク貼り付けになるように仕様がかわりました。 http://support.microsoft.com/kb/2396509/ja http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14110403934 AddPicture(LinkToFileをFalseにする必要事)を用いて画像を挿入してください。 詳しくは参考URLをご覧ください。

参考URL:
http://www.moug.net/tech/exvba/0120020.html

関連するQ&A

  • VBAの修正コードを教えてください(初心者)

    いつもお世話になっております。 下記のVBAコードを使わせて頂き、自分で作成したエクセルにセルに合わせて自動で画像データを添付するようにしたいのですが。 (1)タテヨコの縮尺を保持⇒セルに合わせて縦横の変倍を行う (2)又は、貼付部のセルのサイズは決まっているのでサイズを指定して貼り付ける となるように修正したいのですが、なにぶんVBAは初心者なもので、全くわかりません。 どなたかご指導を宜しくお願い致します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Cancel = True '===============画像選択 myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "画像を選択してください(終了)" 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 '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySP.Height / 2) myWW2 = (Target.Width / 2) - (mySP.Width / 2) mySP.Top = Target.Top + myHH2 mySP.Left = Target.Left + myWW2 Set mySP = Nothing End Sub

  • エクセル 写真貼り付け マクロ

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Cancel = True '===============画像選択 myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "画像を選択してください(終了)" 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 '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySP.Height / 2) myWW2 = (Target.Width / 2) - (mySP.Width / 2) mySP.Top = Target.Top + myHH2 mySP.Left = Target.Left + myWW2 Set mySP = Nothing End Sub ネットでこのマクロを見つけて応用したいのですが 教えてください セルをダブルクリックすると画像が選べて貼り付けできるのですが 全部のセルに反応してしまいます セルの範囲指定したいのですがどうすればいいでしょうか? (1)セル結合でA1:D7範囲だけにこのマクロを入れておきたい場合 (2)セル結合でA1:D7とX1:AA4までとか複数選択したい場合 宜しくお願いします

  • マクロで画像挿入の質問です

    マクロ 初心者です。 ワークシート指定して、ダブルクリック等を使っての画像選択、貼り付け&セルの大きさに合わせる)ことはできるのですが、 ダブルクリック等ではなく、手動でマクロを実行して指定のセル(B37)に貼り付けることはできるでしょうか?(セルの大きさに画像が変換するのは生かしたまま) Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)を sub マクロ名()にして、Moduleに貼り付けて実行したら myAD2 = Target.Address 上記場所でエラーになってしまいます。 どのように変更したら、できるでしょうか?または、できる手段はないのでしょうか? ご教授お願いします。 使用ベースマクロは以下です。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True '===============画像選択 myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "画像を選択してください(終了)" 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 '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySP.Height / 2) myWW2 = (Target.Width / 2) - (mySP.Width / 2) mySP.Top = Target.Top + myHH2 mySP.Left = Target.Left + myWW2 Set mySP = Nothing End Sub

  • VBAの操作方法について教えてください(初心者)

    いつもお世話になっております。 以下のような操作をエクセルにおいて行いたいのですが。 (1)エクセルのセルをクリック! (2)エクスプローラー起動!画像データを選択! (3)セルに合わせて縦横変倍をかけてデータ(JPGデータ)を貼付! 同様の操作が可能な以下のVBAが公開されていたので使わせて頂こうと考えているのですが、操作方法が分かりません。 VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = "Sheet1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = True Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Cancel = True '===============画像選択 myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "画像を選択してください(終了)" 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 '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySP.Height / 2) myWW2 = (Target.Width / 2) - (mySP.Width / 2) mySP.Top = Target.Top + myHH2 mySP.Left = Target.Left + myWW2 Set mySP = Nothing End Sub 作成したエクセルのVBエディタを開く⇒標準モジュールの作成⇒上記VBAをコピペ・・・ 正直わかりません。昨日一晩かけて調べたのですがわかりません。 どなたか宜しくお願い致します。

  • 教えてください。

    教えてください。 初めての投稿になります、書き込みなど不慣れ点あるかも知れませんが宜しくお願いいたします。 エクセル2007のマクロ、VBA書き込みについて 指定された結合セルのみに画像挿入したいのです下記のVBAではすべてのセルに たいして画像挿入されてしまいます、結合セル三か所のみ反映したいのですが。 rivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Cancel = True '===============画像選択 myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "画像を選択してください(終了)" Exit Sub End If '===============画像の掃除 For Each mySP In ActiveSheet.Shapes Debug.Print mySP.Name If InStr(mySP.Name, "Drop Down") = 0 Then myAD1 = mySP.TopLeftCell.MergeArea.Address myAD2 = Target.Address If myAD1 = myAD2 Then mySP.Delete End If 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 '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySP.Height / 2) myWW2 = (Target.Width / 2) - (mySP.Width / 2) mySP.Top = Target.Top + myHH2 mySP.Left = Target.Left + myWW2 Set mySP = Nothing End Sub セル指定 縦B9からB21(195(260ピクセル) 横BからE(40.02(340ピクセル) その他2つの結合セルがあります、サイズはすべて同じです 縦B24からB36  縦B39からB51 横BからE       横BからE  何分素人ですので、どのランに書き込めばいいのかもわかりません いろんなVBAをコピーして貼り付けましたがうまくいきませんでした 宜しくご享受お願いいたします。   

  • 【急】Excelで写真張り付けマクロを書き換えたい

    下記マクロを拾い利用しようと思っているのですが、 以下の点を急ぎ修正しないと使えません。 修正方法などが分からないので、ご教示ください。 要件: ・セルをクリックして写真選択して張り付け、 ・縦横比を変えずに、クリックした結合セルサイズ内に収める。 ・写真は縦横混在に対応 ・写真をセンターに配置する。 ・セルのサイズは変動する。 現状の問題点: ・縦向きの写真を挿入した際にセルの上下から画像がはみ出してしまう。 以下コードーーーーーーーーーーーーーーー Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Cancel = True '画像選択コマンド myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "編集する場合はF2を押下してください。" 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.Shapes.AddPicture(Filename:=myF, LinkToFile:=False, _ SaveWithDocument:=True, Left:=Target.Left, Top:=Target.Top, _ Width:=0, Height:=0) mySp.ScaleHeight 1, msoTrue mySp.ScaleWidth 1, msoTrue '縮尺を変えずにリサイズ If mySp.Width > Target.Width Then mySp.Width = Target.Width * 0.99 If mySp.Height > Target.Height Then mySp.Height = Target.Height * 0.99 'センター中心に配置 myHH2 = (Target.Height / 2) - (mySp.Height / 2) myWW2 = (Target.Width / 2) - (mySp.Width / 2) mySp.Top = Target.Top + myHH2 mySp.Left = Target.Left + myWW2 Set mySp = Nothing End Sub 以上ご協力の程宜しくお願い申し上げます。

  • VBAの写真貼り付けコードについて教えてください。

    写真をダブルクリックで簡単に貼り付けられるVBAのプログラムを友人に貰ったのですが、 追加で図の外枠に黒の2.5ptくらいの線を縁取る文を追加しようと、マクロで記録したプログラムを 入れてみたのですが上手く動作しません。 コードが --------------------------------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Cancel = True If Target.MergeCells = False Then Exit Sub '===============画像選択 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 '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySP.Height / 2) myWW2 = (Target.Width / 2) - (mySP.Width / 2) mySP.Top = Target.Top + myHH2 mySP.Left = Target.Left + myWW2 Set mySP = Nothing End Sub ------------------------------------------------------------------------- お願いいたします。

  • excel マクロ 画像挿入

    以下のマクロでリンク貼り付けではない 画像挿入を作成しようと思いましたがエラーになります 詳しい方 修正 お願いいたします 当方のしたい事としましては 選択したセルでのみに画像挿入 リンクではない画像貼り付け 以下例では B3,B17,B31,B46,B60,B74 セルをダブルクリックすればそこに画像を挿入です Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim myF As Variant Dim mySp As Object Dim myAD1 As String Dim myAD2 As String Dim myHH As Double Dim myWW As Double Dim myHH2 As Double Dim myWW2 As Double If Not Intersect(Range("B3,B17,B31,B46,B60,B74"), Target) Is Nothing Then myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif") Cancel = True '===============画像選択 myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "画像を選択してください(終了)" 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.Shapes.AddPicture(Filename:=myF, LinkToFile:=False, _ SaveWithDocument:=True, Left:=Target.Left, Top:=Target.Top, _ Width:=0, Height:=0) '★ とりあえず 縦横0で。 mySp.ScaleHeight 1, msoTrue '★元のサイズに戻す mySp.ScaleWidth 1, msoTrue '★元のサイズに戻す '===============タテヨコの縮尺を保持 If mySp.Width > Target.Width Then mySp.Width = Target.Width If mySp.Height > Target.Height Then mySp.Height = Target.Height '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySp.Height / 2) myWW2 = (Target.Width / 2) - (mySp.Width / 2) mySp.Top = Target.Top + myHH2 mySp.Left = Target.Left + myWW2 Set mySp = Nothing End Sub

  • エクセル2010 挿入画像の圧縮 VBA

    お世話になります。 エクセル2010を使用しています。写真帳を作成しダブルクリックすれば写真が挿入されるようVBAにて作成しましたが、写真の解像度が高いので挿入するたびに画像が圧縮するようにVBAを組みたいのですが、どなたかご教示ください。 具体的には一同挿入した画像を一度コピーし、再度貼り付ける・・・という動作かなと考えているのですが、マクロの記憶では記録されず・・・困っております。 現在の写真帳の構文は Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Dim myF As Variant Dim mySp As Object Dim myAD1 As String Dim myAD2 As String Dim myHH As Double Dim myWW As Double Dim myHH2 As Double Dim myWW2 As Double '挿入のセルを指定 If Application.Intersect(Target, Range("d6,d23,d40")) Is Nothing Then Exit Sub Cancel = True Application.ScreenUpdating = False End If '写真挿入 Next myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif") If myPic = False Then MsgBox "画像を選択してください" Exit Sub End If Set myRange = Target 'このセル範囲に収まるように画像を縮小する Application.ScreenUpdating = False With ActiveSheet.Shapes.AddPicture(myPic, False, True, myRange.Left, myRange.Top, myRange.Width, myRange.Height) rX = 0.85 rY = 1 If rX > rY Then .Height = .Height * rY Else .Width = .Width * rX End If .Left = .Left + (myRange.Width - .Width) / 2 '写真を横方向の中央に配置 .Top = .Top + (myRange.Height - .Height) / 2 '写真を縦方向に中央に配置 .ZOrder msoSendToBack '最背面へ移動 End With Application.ScreenUpdating = True Cancel = True End Sub 上記に.CUT などを書き足せばよいのか・・・ →エラーばかりで動かなったので。。  こちらに質問することにしました。 どうぞ、よろしくお願いします。

  • エクセル2007のVBAの困りごと

    教えてください。 画像挿入時にエクセルのセルの大きさに合わせるマクロを使っているのですが、エクセル2000、2003では問題なく動くのですが、2007だと、うまくVBAが動かず、画像が縮小・拡大されません。 わかるかた教えてください。 コード  Dim c As Range, cm As Range Application.ScreenUpdating = False For Each c In Selection Set cm = c.MergeArea If c.Address = cm.Item(1).Address Then If Application.Dialogs(xlDialogInsertPicture).Show = False    Then Exit Sub  With Selection .Left = cm.Left .Top = cm.Top .Height = cm.Height .Width = cm.Width End With End If Next Set cm = Nothing

専門家に質問してみよう