次の方法で共有

【ご教示ください】Excel2016 VBAを利用したPNG画像排出について

Anonymous
2018-01-31T03:23:23+00:00

お世話になります。

以下をご教示頂けないでしょうか。

■環境

Excel2016(Office365内)

OS:Windows10

■問題点

VBAを利用し、Excelのセル範囲を画像で保存(PNG)を行っております。

Office2013環境では問題なく動作するのですが、2016では動作の一部に問題が発生しております。

発生している問題:排出画像が真っ白になる

これの解決方法をご教示ください。

※ステップイン実行を行うと問題なく動作します

 自動で動かすと排出される画像が真っ白になります

 動作から推測すると、空のチャートオブジェクトに画像を貼り付けする際

 白い画像が貼られてしまっていることが要因だと思っております

<VBAコードは以下のようになっております>

Sub 画像01()

Dim tempBoolean As Boolean

Dim Folname As String

Dim FSO

Dim Myfile

Dim fil As String

Dim cnt As Integer

Dim Myfol, C As String

Dim gazof As String

Dim actsheetname As String

Dim oShape As Shape

actsheetname = "Sheet1"

ThisWorkbook.Sheets(actsheetname).Select

tempBoolean = ActiveWindow.DisplayGridlines

'枠線

ActiveWindow.DisplayGridlines = False

'画像作成

Range("D1:AP213").CopyPicture Appearance:=xlScreen, Format:=xlPicture

ActiveWindow.DisplayGridlines = tempBoolean

Sheets("画像用").Select

'画像貼付先

ActiveSheet.Paste Destination:=Range("A1")

Selection.ShapeRange.LockAspectRatio = msoTrue

Selection.ShapeRange.Width = 900

'png保存

m_SavePath = dtop & "photo101" & ".png"

Call SaveSelectionAsImage(m_SavePath)

'画像削除

 For Each oShape In ActiveSheet.Shapes

   oShape.Delete

 Next

End Sub

'画像保存部分

Public Sub SaveSelectionAsImage(ByVal argSavePath As String)

    Dim m_Width As Double

    Dim m_Height As Double

    If Len(argSavePath) > 0 Then

        Application.ScreenUpdating = False

        Selection.CopyPicture xlScreen, xlPicture

        DoEvents

        ActiveSheet.Paste

        With Selection

            m_Width = .Width + 8: m_Height = .Height + 8

            .CopyPicture xlScreen, xlBitmap

            .Delete

        End With

        On Error Resume Next

        With ActiveSheet.ChartObjects.Add(0, 0, m_Width, m_Height).Chart

            .Paste

            .ChartArea.Border.LineStyle = 0

            .Width = 1000

            .Export argSavePath, "PNG"

            .Parent.Delete

        End With

        On Error GoTo 0

        Application.ScreenUpdating = True

    End If

End Sub

以上です。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

2 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2018-02-01T01:59:06+00:00

    Rec_K さん、こんにちは。

    マイクロソフト コミュニティへの投稿ありがとうございます。

    セル範囲を PNG 画像として保存する VBA が、Excel 2016 だと正常に動作しないのですね。

    VBA を使った開発の場合、開発者向けの MSDN フォーラムの方がより情報が集まりやすいかと思いますので、そちらに質問を投稿してみてはいかがでしょう。

    MSDN フォーラム

    VBA 専用のカテゴリーがあるので、よろしければご活用くださいね。

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Anonymous
    2018-02-01T06:30:02+00:00

    返信いただきありがとうございます。

    畏まりました。

    そちらで質問してみます。

    ご教示いただきありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません