vba自動生成PPT報告?
編好VBA程序後,自動調取EXCEL中的程序在PPT裡面按照一定格式要求自動生成報告
由於我手上的office是英文版的,所以用到的都是英文功能名。抱歉。
大體上的原理就是你有一個excel表和一個ppt模板,excel里的內容拷貝去ppt里之後,先根據某頁母版進行大概的排版,然後再用vba微調首先是準備工作,在references里選擇excel和PowerPoint object library。
然後開始寫vba,為了更好的理解,我上一段示例代碼~
『 ppApp和ppPres在宏完成後要換成object,以防其他使用者沒有啟用object library,由於採用模塊化,但是每個function都需要同樣的變數,所以設成publicPublic ppApp As Powerpoint.ApplicationPublic ppPres As Powerpoint.PresentationPublic ActFileName As VariantPublic TotalSlide As ObjectSub ExceltoPPT()
『選取ppt模板 ActFileName = Application.GetOpenFilename("microsoft powerpoint-file (*.pptx),*.ppt")Set ppApp = CreateObject("powerPoint.Application")
"set ppApp = New powerpoint.application
ppApp.Visible = True
ppApp.Activate
Set ppPress = ppApp.Presentations.Open(ActFileName) CreatePlan 』我把整個宏寫成模塊化的,這樣一方面防止單個function過大(excel只能跑64k的),另一方面也方便日後維護。「CreatePlan"這個就是生成Plan這張ppt所用到的宏。 Set ppPres = Nothing Set ppApp = NothingEnd Sub下面是正題,如何將excel里的東西拷貝去ppt並排版
Sub CreatePlan()ppApp.ActivePresentation.Slides.Add ppApp.ActivePresentation.Slides.Count + 1, ppLayoutCustom 『在打開的ppt模板中新添加一頁
Set TotalSlide = ppApp.ActivePresentation.Slides(ppApp.ActivePresentation.Slides.Count)
With ppApp.ActiveWindow
.ViewType = ppViewSlide .View.GotoSlide ppApp.ActivePresentation.Slides.Count End With 『顯示新添加的ppt頁面,這是為了確保PowerPoint在微調格式的時候不出錯"複製特定單元格去ppt的標題欄
TotalSlide.Shapes(1).TextFrame.TextRange.Text = Range("A1")"複製特定單元格去ppt的副標題欄
TotalSlide.Shapes(2).TextFrame.TextRange.Text = Range("B1")』下面是拷貝一個圖表,先選擇excel的頁,然後複製圖表並粘貼去ppt
Worksheets("plan").Activate Worksheets("plan").Shapes.Range(Array("Plan_Chart")).Select Selection.CopyTotalSlide.Shapes.PasteSpecial ppPasteDefault
" 調整圖表的字型大小
ppApp.ActivePresentation.Slides(ppApp.ActivePresentation.Slides.Count).Shapes(3).Chart.ChartArea.Format.TextFrame2.TextRange.Font.Size = 10 ppApp.ActivePresentation.Slides(ppApp.ActivePresentation.Slides.Count).Shapes(3).Chart.Axes(xlCategory).TickLabels.Font.Size = 12"調整圖表的字的顏色
ppApp.ActivePresentation.Slides(ppApp.ActivePresentation.Slides.Count).Shapes(3).Chart.FullSeriesCollection(3).Points(7).DataLabel _.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 255, 255)
ppApp.ActivePresentation.Slides(ppApp.ActivePresentation.Slides.Count).Shapes(3).Chart.FullSeriesCollection(4).Points(8).DataLabel _ .Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 255, 255) ppApp.ActivePresentation.Slides(ppApp.ActivePresentation.Slides.Count).Shapes(3).Chart.FullSeriesCollection(3).Points(9).DataLabel _ .Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 255, 255) ppApp.ActivePresentation.Slides(ppApp.ActivePresentation.Slides.Count).Shapes(3).Chart.FullSeriesCollection(2).Points(10).DataLabel _ .Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 255, 255) ppApp.ActivePresentation.Slides(ppApp.ActivePresentation.Slides.Count).Shapes(3).Chart.FullSeriesCollection(2).Points(11).DataLabel _ .Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 255, 255) ppApp.ActivePresentation.Slides(ppApp.ActivePresentation.Slides.Count).Shapes(3).Chart.FullSeriesCollection(3).Points(12).DataLabel _.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 255, 255)
"調整圖表的位置和大小
TotalSlide.Shapes(3).Left = 22 TotalSlide.Shapes(3).Top = 134 TotalSlide.Shapes(3).Height = 301 TotalSlide.Shapes(3).Width = 403End Sub
恩,基本上就這樣ppApp.ActivePresentation.Slides.Add ppApp.ActivePresentation.Slides.Count + 1, ppLayoutCustom 『在打開的ppt模板中新添加一頁
這個位置報錯,是什麼原因。另一個辦法是做好PPT,用VBA更新這些PPT中的數據點
這個不用VBA都能實現的,粘貼鏈接就行,我都用了好幾年了。
想問下,就是也是關於自動做PPT報告的,怎麼才能把文件夾中的圖片通過VBA導入到PPT中的固定位置; 如果是要依次導入幾張,又要怎麼實現,麻煩指導,謝謝
推薦閱讀:
※Excel VBA進階怎麼學,感覺市面上的書都是入門型的?
※自學 VBA 到中等水平一般需要多久?
※怎麼給VBA代碼提速?
※需要買一本execl vba 有沒有推薦的?
※一個word文檔裡邊有很多內容是Access資料庫里的內容,如何能自動綁定到資料庫?