職場中經(jīng)常有將包含“數(shù)據(jù),圖表,及其它控件等元素”整體一起轉(zhuǎn)換為圖片格式的需求。平時(shí)常規(guī)操作我們都是通過截屏軟件來完成該需求任務(wù)的。很多插件中包括筆者開發(fā)的《PowerClick》辦公增效插件中也有收錄該功能,職場人有需求可以自行下載安裝。今天《神奇的VBA》編程系列將分享如何使用Excel VBA編程代碼實(shí)現(xiàn)該需求。 單元格區(qū)域導(dǎo)出為圖片 下面是一個非常簡單的子程序,它將指定單元格區(qū)域保存到j(luò)pg格式的圖像文件中。 思路:基本概念是我們復(fù)制單元格區(qū)域,創(chuàng)建圖表對象,將范圍內(nèi)容粘貼到圖表中并將圖表對象導(dǎo)出到j(luò)pg文件。這點(diǎn)其實(shí)跟手動操作步驟完全一樣。因?yàn)镋xcel本身就自帶了這個功能, VBA也只是利用Excel提供的API接口代替人工將該功能快速自動化。 代碼分享如下 Function ExportRangeAsImage(ws As Worksheet, rng As Range, sFile As String) As BooleanDim MyChart As ChartObjectApplication.ScreenUpdating = Falsews.Activaterng.CopyPicture xlScreen, xlPicture '復(fù)制將單元格區(qū)域復(fù)制為圖片Set MyChart = ws.ChartObjects.Add(0, 0, rng.Width, rng.Height) '添加圖表對象MyChart.ActivateWith MyChart.Chart .Paste '向圖表畫板粘貼復(fù)制的單元格區(qū)域 .Export sFile, "JPG" '將圖表轉(zhuǎn)換為JPG格式圖片End WithMyChart.Delete '刪除圖表ExportRangeAsImage = TrueApplication.ScreenUpdating = TrueSet MyChart = NothingEnd Function 上面標(biāo)準(zhǔn)方法調(diào)用時(shí),只需更新“JPG”值和提供的 sFile參數(shù)值即可更改導(dǎo)出的圖像格式。用戶也可以指定JPG,PNG,GIF,BMP等圖片格式,這些格式導(dǎo)出已經(jīng)經(jīng)過測試過,可以正常導(dǎo)出。 驗(yàn)證程序如下: Sub 導(dǎo)出圖片驗(yàn)證()ExportRangeAsImage ActiveSheet, Range("A1:F5"), "D:\ExcelPicture_001.png"End Sub 用戶可以根據(jù)鼠標(biāo)選區(qū)靈活導(dǎo)出圖片格式 Sub 導(dǎo)出圖片驗(yàn)證()ExportRangeAsImage ActiveSheet, Selection, "d:\ExcelPicture_001.png"End Sub 注意上面《神奇的VBA》提供的方法比較基本,采納用戶可以根據(jù)自己的實(shí)際需求做更多的擴(kuò)展, 比如保存時(shí)驗(yàn)證路徑是否存在,只在不存在的時(shí)候創(chuàng)建圖片文件,或者檢查文件是否已經(jīng)存在并詢問它是否應(yīng)該被覆蓋等等。 單元格區(qū)域導(dǎo)出為圖片優(yōu)化 上面將單元格區(qū)域?qū)С龀蓤D片的程序可以導(dǎo)成不同的圖片格式, 那么我們可以繼續(xù)優(yōu)化修改上面的VBA程序,使其接受格式作為輸入?yún)?shù),并在運(yùn)行時(shí)為我們提供最大的靈活性,而不是每次都編輯代碼或需要同一函數(shù)的多個版本。 Function ExportRangeAsImage_優(yōu)化版(ws As Worksheet, rng As Range, sPath As String, sFileName As String, Optional sImgExtension As String = "JPG") As BooleanDim MyChart As ChartObjectIf Right(sPath, 1) <> "\" Then sPath = sPath & "\"Application.ScreenUpdating = Falsews.Activaterng.CopyPicture xlScreen, xlPictureSet MyChart = ws.ChartObjects.Add(0, 0, rng.Width, rng.Height)MyChart.ActivateWith MyChart.Chart .Paste 'Paste our Range .Export sPath & sFileName & "." & LCase(sImgExtension), sImgExtensionEnd WithMyChart.DeleteExportRangeAsImage_優(yōu)化版 = TrueApplication.ScreenUpdating = TrueSet MyChart = NothingEnd Function 再次驗(yàn)證,成功運(yùn)行! Sub 導(dǎo)出圖片驗(yàn)證()ExportRangeAsImage_優(yōu)化版 ActiveSheet, Selection, "C:\Users\as\Desktop", "sdfsd"End Sub 實(shí)際上上面的代碼可以進(jìn)一步優(yōu)化,比如多重選區(qū)動態(tài)導(dǎo)出。 這里不再詳細(xì)介紹?;敬a對職場人已經(jīng)基本夠用,更多的實(shí)際需求,職場人可以在此基礎(chǔ)上拿來即用按需定制。VBA辦公自動化編程學(xué)習(xí)可參考《神奇的VBA》學(xué)習(xí)插件。 本篇分享的思路和代碼拋磚引玉! 原創(chuàng)碼字不易歡迎"點(diǎn)贊","轉(zhuǎn)發(fā)" 或點(diǎn)擊"在看" |
|