none
2007で使えたマクロが2013では使えなくなりました。 RRS feed

  • 質問

  • Excel2007までは、以下の処理で、貼り付けた写真枚数を一枚ずつセルの位置に合わせて移動できたのですが

     2013では一枚だけしか処理してくれません。

      

        ans = Application.Dialogs(xlDialogInsertPicture).Show

         If ans Then

             Selection.ShapeRange.LockAspectRatio = msoFalse

             Selection.ShapeRange.Height = 277 - 3

             Selection.ShapeRange.Width = 370 - 5

             Selection.ShapeRange.Rotation = 0#

            i = 1

            For Each sh In Selection.ShapeRange   ←貼り付けられた写真が2007では

                                     すべて選択されていると認識していますが

                                     2013ですと一枚しか選択されていない状態

                                     になってしまうのか、この部分をどう訂正

                                     するべきか教えてください。

                If sh.Type = msoPicture Then

                    f_open(i) = sh.AlternativeText

                    sh.Cut

                    Cells(start_r + (i - 1) * 14, 3).Select

                    ActiveSheet.Paste

                 End If

                i = i + 1

            Next

         End If

    張り付けた写真が数枚でも、1枚だけ処理をして、for Next

    を抜けてしまいます。

    Selection.ShapeRange の前に、写真のすべて選択の記述を書き込めばと思うのですが

    どういう記述にするのかわかりません。よろしくお願いいたします。

    2014年4月2日 6:16

すべての返信

  • フォーラムの皆様へ

    試行錯誤で何とか複数枚でも処理ができるように改変できました。

    お騒がせいたし申し訳ありませんでした。

    2014年4月2日 7:34
  • 解決されて良かったですね。
    もし、よろしければですが、どのように解決されたかを、後に悩んでここに辿り着いた人のために書いていただくと、助かります。

    #ちなみに私も同じように悩まされた経験があります。Excelの動作が変更になるので、同じVBAを実行しても、Excelの動作に期待している部分が、おかしな結果になってしまうんですね。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年4月2日 7:50
    モデレータ
  • 画像を張り付けた状態で、貼り付けた全ての画像が2007の場合は選択されたままでしたが、

    2013では、解除されているようでした。そこで Selection.ShapeRangeでなく、

    下記のように書き換えました。

        If ans Then
            i = 1
            For Each sh In ActiveSheet.Shapes
                If sh.Type = msoPicture Then
                    sh.LockAspectRatio = msoFalse
                    sh.Height = 277 - 3
                    sh.Width = 370 - 5
                    sh.Rotation = 0#

                    f_open(i) = sh.AlternativeText
                    sh.Cut
                    Cells(start_r + (i - 1) * 14, 3).Select
                    ActiveSheet.Paste
                    i = i + 1
                End If
              Next
        End If

    お騒がせいたしました。

    2014年4月3日 2:18
  • 解決策を掲載いただき、ありがとうございました。
    きっと、誰かを救うことになるのではないかと思います。

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年4月3日 3:21
    モデレータ