大家好,我們今日繼續講解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
代碼截圖:
代碼解析: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方法刪除。
運行:我現在工作表中放置兩個圖片,上面的是我上節做的圖,下面的是我的平臺圖標。
運行後:
大家發現只有一個圖片,為什麼呢?我們下面修正代碼:
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
截圖:
再次運行:
這樣就都出來了。
今日內容迴向:
1:如何在表格中導出圖片?
2:上面的導出方案中為什麼第一種沒有導全呢?
閱讀更多 VBA專家 的文章