Excel一鍵自動生成PPT報(bào)告

混跡職場多年剃执,你一定和國內(nèi)頂級的咨詢公司打過交道忌穿。你是否曾經(jīng)驚嘆:他們究竟是如何做到在短時間內(nèi)完成海量的交付件伶椿,并且PPT里面的文字和圖表對得整整齊齊咽扇,甚至于一個像素都不差闺阱,在翻頁的時候盛正,除了局部的內(nèi)容不一樣隧熙,你竟然感覺不到其他部分有任何變化灶似。

曾己何時荠卷,我也有此感嘆模庐。直到后來,我知道了有PPT編程這件事油宜。原來這一切都是提前準(zhǔn)備好素材掂碱,寫好VBA程序怜姿,點(diǎn)擊按鈕便可完成。無論是效率還是質(zhì)量疼燥,都比人工復(fù)制粘貼好得多社牲。閑言少敘,先上效果圖:

那么悴了,如此省時省力的一鍵自動生成PPT報(bào)告究竟是如何實(shí)現(xiàn)的呢搏恤?

通常來講,VBA編程實(shí)現(xiàn)如上效果有兩種途徑:

其一湃交,代碼寫在PPT中熟空;

其二,代碼寫在Excel中搞莺;

我個人比較喜歡第二種方式息罗,本文介紹了如何在Excel中編寫VBA代碼,實(shí)現(xiàn)一鍵自動生成PPT報(bào)告的酷炫效果才沧。

01—按報(bào)告內(nèi)容準(zhǔn)備對應(yīng)Excel文件

1.以本例為例:我分別準(zhǔn)備了五張工作表作為PPT中素材的來源迈喉;

2.設(shè)置好格式,調(diào)整好高度温圆,寬度挨摸,字體,居中岁歉,顏色等得运,避免后期再用VBA代碼進(jìn)行設(shè)置;

3.數(shù)據(jù)要有明確的按需篩選的字段锅移,便于VBA自動篩選熔掺,然后將篩選結(jié)果粘貼進(jìn)PPT中指定位置;

4.PPT中粘貼的圖片非剃,來自于“各省矢量圖”這張工作表置逻,這里面有個難點(diǎn)。

我們之前在Excel VS Tableau省市交叉銷售地圖一文中曾經(jīng)講過定義名稱動態(tài)引用圖片的知識备绽。不過券坞,當(dāng)時用到的是一維的,比較簡單疯坤。本例中用到的是二維的圖片存儲區(qū)域报慕,稍微復(fù)雜些。

4.1:定義名稱轄區(qū)地圖=INDEX(各省矢量圖!$B$2:$C$5,MATCH(待分析列表!$P$2,各省矢量圖!$A$1:$A$5,0),MATCH(待分析列表!$S$2,各省矢量圖!$B$1:$C$1,0))压怠,這里INDEX嵌套了MATCH函數(shù)眠冈;

4.2:“各省矢量圖”中設(shè)置A列為輔助列,A1=待分析列表!$S$2,A2=IFERROR(HLOOKUP($A$1,$B$1:$C$5,ROW(A2),0),"")蜗顽,即將A1值設(shè)置為當(dāng)前省份布卡,A2及以下通過Hlookup函數(shù),將該省份對應(yīng)的數(shù)據(jù)查詢出來雇盖,用于定義名稱時計(jì)算MATCH(待分析列表!$P$2,各省矢量圖!$A$1:$A$5,0)忿等,即Index查詢區(qū)域的行值;MATCH(待分析列表!$S$2,各省矢量圖!$B$1:$C$1,0))用于返回Index查詢區(qū)域的列值崔挖。

關(guān)于這個二維表中通過定義名稱動態(tài)引用圖片的方法贸街,用到了輔助列思維,很經(jīng)典狸相,需要仔細(xì)體味和掌握薛匪。

02—準(zhǔn)備所需的PPT模板

這里我準(zhǔn)備好了如下模板,

注意:

1)需要在一個PPT中放兩張完全一樣的空白模板脓鹃,便于后續(xù)使用以此為基礎(chǔ)反復(fù)進(jìn)行Duplicate操作逸尖,直至所有的頁面都已自動生成為止。然后瘸右,刪除冗余的首尾模板頁即可娇跟。

2)本例中的PPT內(nèi)容小標(biāo)題,有一些是固定的并且每頁都相同的太颤。這樣的話就只需將其固化到PPT模板中苞俘,調(diào)整好格式和位置即可,避免反復(fù)用VBA代碼粘貼栋齿,提高代碼運(yùn)行效率苗胀。


03—VBA設(shè)置引用

按住ALT+F11,進(jìn)入VBE編輯環(huán)境瓦堵,點(diǎn)擊菜單欄中的引用,添加Microsoft Powerpoint 14.0 Object Library引用歌亲。這一步必不可少菇用,這是VBA能夠創(chuàng)建PPT的關(guān)鍵所在。

否則會報(bào)錯陷揪,無法定義activeSlide變量惋鸥,即以下代碼會運(yùn)行錯誤,

"Dim activeSlide as PowerPoint.Slide"會彈出編譯錯誤的對話框悍缠。

04—構(gòu)建待分析列表

接下來卦绣,我們根據(jù)PPT內(nèi)每頁要呈現(xiàn)的內(nèi)容,制作待分析列表飞蚓,本例中主要字段為K至M列滤港,這里通過VBA代碼的for循環(huán)語句,將各行值粘貼到P1:P2及S2位置趴拧,用于生成標(biāo)題及確定省份溅漾。

05—編寫VBA代碼

5.1定義相關(guān)變量及對象

5.2設(shè)置For循環(huán)語句山叮,復(fù)制模板為新頁,設(shè)置當(dāng)前活動PPT頁為倒數(shù)第二頁添履;

此外切記設(shè)置容錯處理語句On error resume next屁倔!因?yàn)楸纠兴玫腃opypicture方法,會發(fā)生隨機(jī)性的不可避免的錯誤暮胧。但實(shí)際上锐借,發(fā)生這個錯誤時VBA所有的語句都已經(jīng)正式執(zhí)行過,這個錯誤純粹就是來搗亂的往衷,可能是微軟Office的bug吧瞎饲。網(wǎng)上關(guān)于這個錯誤有很多解決方法,但我親測無效炼绘!

其實(shí)解決起來非常簡單嗅战,只需一句容錯處理語句On error resume next便可!

5.3完成PPT每頁內(nèi)容的粘貼俺亮,本例中先通過自動篩選驮捍,然后將篩選結(jié)果粘貼到指定位置。

5.4刪除冗余的頭部和尾部幻燈片脚曾,只保留有效的內(nèi)容頁东且。清除對象變量activeSlide和newPowerPoint

注:這個方法有點(diǎn)笨,暫時沒想到更好的方法本讥。

注:

1)Range("XXX").CopyPicture方法廣泛地應(yīng)用于本例中珊泳,將相應(yīng)信息粘貼到PPT。這意味著將以圖片形式粘貼而無法在PPT中再編輯拷沸。

但這里標(biāo)題其實(shí)是可以做成可編的色查,方法是在PPT模板中,插入一個文本框撞芍,將其用ALT+F10鍵將其命名為"Title",然后通過以下VBA代碼為該文本框賦值秧了。activeSlide.Shapes("Title").TextFrame.TextRange.Text= Worksheets("待分析列表").Range("P4")。這樣生成的PPT報(bào)告中序无,標(biāo)題則不再是圖片验毡,而是可編輯的文本框。

此外帝嗡,本例中沒有提到Chart的粘貼晶通。其實(shí)Chart也是可以粘貼成可編輯模式的,只是其粘貼成鏈接格式后哟玷,需要通過For循環(huán)生成多個Chart并且分別為每個Chart準(zhǔn)備數(shù)據(jù)源狮辽,在用以下代碼調(diào)用及粘貼時,也需在For循環(huán)中不斷修改"chart"名字,使之調(diào)用正確的圖表完成粘貼進(jìn)PPT的動作隘竭。ActiveSheet.ChartObjects("chart").ChartArea.Copy

activeSlide.Shapes.PasteSpecial(Link = True)

以上的方法過于復(fù)雜塘秦,這里不展開討論。關(guān)于Chart加入PPT報(bào)告的最簡單方法动看,是將Chart所在區(qū)域用同樣的Copypicture方法粘貼到PPT中尊剔,這樣的代碼最簡潔有效。

2)這里還用到了Range("轄區(qū)地圖").Copypicture方法菱皆,這個發(fā)現(xiàn)讓我感到欣喜须误。"轄區(qū)地圖"是之前定義的名稱:

轄區(qū)地圖=INDEX(各省矢量圖!$B$2:$C$5,MATCH(待分析列表!$P$2,各省矢量圖!$A$1:$A$5,0),MATCH(待分析列表!$S$2,各省矢量圖!$B$1:$C$1,0))

本例中,Copypicture方法用到了定義的名稱中仇轻,繼而使動態(tài)查詢引用二維表中的圖片京痢,并將其粘貼進(jìn)PPT中成為可能。

3)本例中的需求比較特殊:

需要用指定的模板篷店,不能再使用newPowerPoint.Presentations.Add來創(chuàng)建一個創(chuàng)建默認(rèn)PPT模板祭椰,而是需打開指定的PPT模板文件;

因需要創(chuàng)建的頁數(shù)不固定疲陕,需要按需進(jìn)行PPT模板頁的復(fù)制(Duplicate)方淤,直到For循環(huán)結(jié)束為止。

需要按指定字段和條件篩選蹄殃,然后將篩選結(jié)果的列表粘貼進(jìn)PPT中携茂;

06—錯誤檢查及格式調(diào)整

運(yùn)行代碼,檢查是否有異常和錯誤诅岩,對于頁面布局不滿意的地方讳苦,需在Excel源文件中對相應(yīng)工作表的格式進(jìn)行調(diào)整;對于粘貼位置吩谦,需在VBA代碼中通過以下語句進(jìn)行調(diào)整:

newPowerPoint.ActiveWindow.Selection.ShapeRange.Left = 5

newPowerPoint.ActiveWindow.Selection.ShapeRange.Top = 60

這個環(huán)節(jié)必不可少鸳谜!檢查無誤后,點(diǎn)擊宏按鈕逮京,完成PPT報(bào)告的制作卿堂。不足之處是,本程序只生成了報(bào)告的主體部分懒棉,對于封面和結(jié)尾頁還是需要手動添加。不管怎樣览绿,總數(shù)躲過無數(shù)的坑策严,得到了想要的結(jié)果。

至此饿敲,大功告成妻导。

如果有朋友想要Excel源文件,可關(guān)注本文作者個人微信公眾號,發(fā)送關(guān)鍵詞“打包下載”倔韭。

這是我的第二篇原創(chuàng)文章术浪,如果閣下覺得還有一點(diǎn)點(diǎn)收獲,請不要吝嗇給我“好看”哦寿酌!那將是我繼續(xù)發(fā)布原創(chuàng)作品的最大鼓勵胰苏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市醇疼,隨后出現(xiàn)的幾起案子硕并,更是在濱河造成了極大的恐慌,老刑警劉巖秧荆,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倔毙,死亡現(xiàn)場離奇詭異,居然都是意外死亡乙濒,警方通過查閱死者的電腦和手機(jī)陕赃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颁股,“玉大人么库,你說我怎么就攤上這事⊥泱” “怎么了廊散?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梧疲。 經(jīng)常有香客問我允睹,道長,這世上最難降的妖魔是什么幌氮? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任缭受,我火速辦了婚禮,結(jié)果婚禮上该互,老公的妹妹穿的比我還像新娘米者。我一直安慰自己,他們只是感情好宇智,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布蔓搞。 她就那樣靜靜地躺著,像睡著了一般随橘。 火紅的嫁衣襯著肌膚如雪喂分。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天机蔗,我揣著相機(jī)與錄音蒲祈,去河邊找鬼甘萧。 笑死,一個胖子當(dāng)著我的面吹牛梆掸,可吹牛的內(nèi)容都是我干的扬卷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼酸钦,長吁一口氣:“原來是場噩夢啊……” “哼怪得!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钝鸽,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤汇恤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拔恰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體因谎,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年颜懊,在試婚紗的時候發(fā)現(xiàn)自己被綠了财岔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡河爹,死狀恐怖匠璧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咸这,我是刑警寧澤夷恍,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站媳维,受9級特大地震影響酿雪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侄刽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一指黎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧州丹,春花似錦醋安、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至所计,卻和暖如春磺芭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背醉箕。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工钾腺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讥裤。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓放棒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親己英。 傳聞我的和親對象是個殘疾皇子间螟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • = 前言 = 之前寫過一篇關(guān)于厚切牛排的長文厢破,從熱度來看,大家還是很喜歡吃牛排的嘛治拿。 《超長文牛排指南:從選購到烹...
    識食務(wù)者閱讀 5,699評論 0 10
  • 圖片發(fā)自簡書App 【原文】 庖丁為文惠君解牛摩泪,手之所觸,肩之所倚劫谅,足之所履见坑,膝之所踦,砉然響然捏检,奏刀騞然...
    麟止閱讀 1,157評論 0 4
  • 閉上眼荞驴,隱現(xiàn)你的容顏, 是那么嬌艷贯城,令我心醉熊楼, 讓自己努力忘卻, 卻愈發(fā)強(qiáng)烈能犯。 耳邊回響你熟悉的聲音鲫骗, 想去細(xì)聽,...
    瓊恩snow閱讀 305評論 0 1
  • 昨天晚上回家剛吃兩口飯,手機(jī)就叮叮的傳來了簡訊合瓢,打開一看坦胶,是班長發(fā)來的,說班里出了大事晴楔,求救顿苇。 當(dāng)時立馬緊張起來!...
    北方時小姐閱讀 399評論 0 1
  • 看完東野圭吾的大作《幻夜》和《白夜行》的朋友税弃,自然熱衷對小說的討論纪岁,趁好友西瓜小姐和我交流的契機(jī),我對她提到的點(diǎn) ...
    CaliforniaD閱讀 276評論 0 0