VBA 保存幻灯片
VBA save Powerpoint
我已经设法打开我的 powerpoint 模板,然后添加来自 excel 的图表,现在我试图用一个新名称保存它,但是我的代码总是失败。错误是
Run-time error '91': Object variable or With block variable not set
主码
Option Explicit
Public PPT As PowerPoint.Application
Public PPT_pres As PowerPoint.Presentation
Sub master()
Dim fileNameString As String
fileNameString = "C:\Users\Person\Desktop\Testfolder\Test1.pptx"
Call Module4.OpenPowerpoint
Call Module4.PasteCharts
PPT_pres.SaveAs fileNameString, 1 'ERROR HERE
PPT.Quit
End Sub
其中 Module4.OpenPowerPoint 是
Public Sub OpenPowerpoint()
Set PPT = New PowerPoint.Application
PPT.Visible = True
Set PPT_pres = PPT.Presentations.Open(Filename:="C:\Users\Person\Desktop\Testfolder\Test - Template.pptx")
End Sub
过去的图表代码 - 这对不同的图表重复几次
Public Sub CopyPasteForecastTopGraph()
If PPT Is Nothing Then Exit Sub
If PPT_pres Is Nothing Then Exit Sub
Dim rng As Range
Dim mySlide As Object
Dim myShape As Object
Dim cht As Chart
Set mySlide = PPT_pres.Slides(5)
With mySlide
.Select
Set cht = ThisWorkbook.Worksheets("Forecast").ChartObjects("FcChart").Chart
cht.CopyPicture Appearance:=xlScreen, Format:=xlPicture, Size:=xlScreen
.Shapes.Paste.Select
'''''''''''''''''''''''''''''''''
'Paste as Chart and break link. '
'''''''''''''''''''''''''''''''''
'cht.ChartArea.Copy
'.Shapes.Paste.Select
'With .Shapes("HcChart")
'.LinkFormat.BreakLink
'End With
PPT_pres.Windows(1).Selection.ShapeRange.Left = 35
PPT_pres.Windows(1).Selection.ShapeRange.Top = 110
PPT_pres.Windows(1).Selection.ShapeRange.Width = 720
PPT_pres.Windows(1).Selection.ShapeRange.Height = 300
End With
'Clear The Clipboard
Application.CutCopyMode = False
Application.Wait (Now + TimeValue("00:00:01"))
End Sub
由于您没有显示 PasteCharts 的代码,因此很难判断。因为您为您的对象使用全局变量编码 PPT.quit 是可能的 "messy",特别是当您不关闭 PPT_pres 并且始终在 Module4 中创建 Powerpoint 的新实例时。
要么完全摆脱全局变量并重构代码,要么尝试在发生错误的行之后按以下方式更改代码 ppt_pres.SaveAs fileNameString, 1
ppt_pres.Close
Set ppt_pres = Nothing
PPT.Quit
Set PPT = Nothing
我已经设法打开我的 powerpoint 模板,然后添加来自 excel 的图表,现在我试图用一个新名称保存它,但是我的代码总是失败。错误是
Run-time error '91': Object variable or With block variable not set
主码
Option Explicit
Public PPT As PowerPoint.Application
Public PPT_pres As PowerPoint.Presentation
Sub master()
Dim fileNameString As String
fileNameString = "C:\Users\Person\Desktop\Testfolder\Test1.pptx"
Call Module4.OpenPowerpoint
Call Module4.PasteCharts
PPT_pres.SaveAs fileNameString, 1 'ERROR HERE
PPT.Quit
End Sub
其中 Module4.OpenPowerPoint 是
Public Sub OpenPowerpoint()
Set PPT = New PowerPoint.Application
PPT.Visible = True
Set PPT_pres = PPT.Presentations.Open(Filename:="C:\Users\Person\Desktop\Testfolder\Test - Template.pptx")
End Sub
过去的图表代码 - 这对不同的图表重复几次
Public Sub CopyPasteForecastTopGraph()
If PPT Is Nothing Then Exit Sub
If PPT_pres Is Nothing Then Exit Sub
Dim rng As Range
Dim mySlide As Object
Dim myShape As Object
Dim cht As Chart
Set mySlide = PPT_pres.Slides(5)
With mySlide
.Select
Set cht = ThisWorkbook.Worksheets("Forecast").ChartObjects("FcChart").Chart
cht.CopyPicture Appearance:=xlScreen, Format:=xlPicture, Size:=xlScreen
.Shapes.Paste.Select
'''''''''''''''''''''''''''''''''
'Paste as Chart and break link. '
'''''''''''''''''''''''''''''''''
'cht.ChartArea.Copy
'.Shapes.Paste.Select
'With .Shapes("HcChart")
'.LinkFormat.BreakLink
'End With
PPT_pres.Windows(1).Selection.ShapeRange.Left = 35
PPT_pres.Windows(1).Selection.ShapeRange.Top = 110
PPT_pres.Windows(1).Selection.ShapeRange.Width = 720
PPT_pres.Windows(1).Selection.ShapeRange.Height = 300
End With
'Clear The Clipboard
Application.CutCopyMode = False
Application.Wait (Now + TimeValue("00:00:01"))
End Sub
由于您没有显示 PasteCharts 的代码,因此很难判断。因为您为您的对象使用全局变量编码 PPT.quit 是可能的 "messy",特别是当您不关闭 PPT_pres 并且始终在 Module4 中创建 Powerpoint 的新实例时。
要么完全摆脱全局变量并重构代码,要么尝试在发生错误的行之后按以下方式更改代码 ppt_pres.SaveAs fileNameString, 1
ppt_pres.Close
Set ppt_pres = Nothing
PPT.Quit
Set PPT = Nothing