圖片的導出,VBA代碼如何導出工作表中的所有圖片

大家好,我們今日繼續講解VBA代碼解決方案的第118講內容:如何把工作表中的圖片導出到專門的文件。我們在工作中,有時需要將工作表中的圖形對象保存為單獨的圖像文件,怎麼操作呢?思路:首先我們用ChartObjects對象的Add 方法創建新的嵌入圖表,把圖片複製到這個Chart對象中,然後使用Export方法把這個圖表導出來。

一:應用於ChartObjects對象的Add 方法講解。

語法如下:expression.Add(Left, Top, Width, Height)

參數expression是必須的,返回一個ChartObjects對象。

參數Left、參數Top是必需的,以磅為單位給出新對象的初始座標,該座標是相對於工作表上單元格A1的左上角或圖表的左上角的座標。

參數Width、參數Height是必須的,以磅為單位給出新對象的初始大小。

二:應用於Chart對象的Export方法將圖形對象以圖形格式導出,語法如下:

expression.Export(Filename, FilterName, Interactive)

其中參數Filename是必須的,被導出的文件的名稱。

參數FilterName是可選的,被導出的文件的圖形格式,如JPG。GIF。

下面我們看我們的實際代碼,如下所示。

Sub MynzExportShp()

Dim Shp As Shape

Dim FileName As String

For Each Shp In Sheets("sheet2").Shapes

If Shp.Type = msoPicture Then

FileName = ThisWorkbook.Path & "" & Shp.Name & ".gif"

Shp.Copy

With Sheets("sheet2").ChartObjects.Add(0, 0, Shp.Width + 10, Shp.Height + 12).Chart

.Paste

.Export FileName, "gif"

.Parent.Delete

End With

End If

Next

End Sub

代碼截圖:

圖片的導出,VBA代碼如何導出工作表中的所有圖片

代碼解析:MynzExportShp過程將Sheets("sheet2")工作表的所有圖片以文件形式導出到同一目錄中。

第4行代碼使用For Each...Next 語句遍歷Sheets("sheet2")工作表中的所有圖形。

第5行代碼判斷圖形的類型是否為圖片,應用於Shape對象的Type屬性返回或設置圖形類型。

msoShapeTypeMixed-2混合型圖形

msoAutoShape1自選圖形

msoCallout2沒有邊框線的標註

msoChart3圖表

msoComment4批註

msoFreeform5任意多邊形

msoGroup6圖形組合

msoFormControl8窗體控件

msoLine9線條

msoLinkedOLEObject10鏈接式或內嵌OLE對象

msoLinkedPicture11剪貼畫或圖片

msoOLEControlObject12ActiveX 控件

msoPicture13圖片

msoTextEffect15藝術字

msoTextBox17文本框

msoDiagram21組織結構圖或其他圖示

第6行代碼使用字符串變量FileName記錄需導出圖形的路徑和名稱。

第7行代碼複製圖形,應用於Shape對象的Copy方法將對象複製到剪貼板。

第8行代碼使用Add方法在工作表中添加一個圖表,

第9行代碼使用Paste方法將圖形粘貼到新的嵌入圖表中,應用於Chart對象的Paste方法將剪貼板中的圖表數據粘貼到指定的圖表中,語法如下:

expression.Paste(Type)

參數expression是必須的,返回一個Chart對象。

參數Type是可選的的,如果剪貼板中有圖表,本參數指定要粘貼的圖表信息。可為以下XlPasteType常量之一:xlFormats、xlFormulas或xlAll。默認值為xlAll,如果剪貼板中是數據不是圖表,則不能使用本參數。

第10行代碼使用Export方法將圖表導出到同一目錄中,

第10行代碼刪除新建的圖表。因為Chart對象是不能使用Delete方法直接刪除的,應先使用Parent屬性返回指定對象的父對象,然後使用Delete方法刪除。

運行:我現在工作表中放置兩個圖片,上面的是我上節做的圖,下面的是我的平臺圖標。

圖片的導出,VBA代碼如何導出工作表中的所有圖片

運行後:

圖片的導出,VBA代碼如何導出工作表中的所有圖片

大家發現只有一個圖片,為什麼呢?我們下面修正代碼:

Sub MynzExportShpTWO()

Dim Shp As Shape

Dim FileName As String

For Each Shp In Sheets("sheet2").Shapes

FileName = ThisWorkbook.Path & "" & Shp.Name & ".gif"

Shp.Copy

With Sheets("sheet2").ChartObjects.Add(0, 0, Shp.Width + 28, Shp.Height + 30).Chart

.Paste

.Export FileName, "gif"

.Parent.Delete

End With

Next

End Sub

截圖:

圖片的導出,VBA代碼如何導出工作表中的所有圖片

再次運行:

圖片的導出,VBA代碼如何導出工作表中的所有圖片

這樣就都出來了。

今日內容迴向:

1:如何在表格中導出圖片?

2:上面的導出方案中為什麼第一種沒有導全呢?


分享到:


相關文章: