我觉得我缺乏一些真正的基础知识,如果在这里提出所有这些基本问题,我觉得我会浪费你的时间.能否请您推荐一本很好的PowerPoint VBA教程,向我解释基础知识.提供了一个带有例子的教程.
有谁知道PowerPoint中的VBA/VSTO编程的未来是什么?我一直在研究Office自动化项目,发现使用PowerPoint特别令人沮丧,因为它似乎比Excel或Word中的VBA支持低一级.
感觉MS正试图逐步淘汰PowerPoints中对VBA的支持,因为他们在2007版本中放弃了宏录制,而对象模型缺少一些关键功能支持.
我试图在Powerpoint 2010中使用VBA在以下代码的帮助下打开Excel文件.
Private Sub CommandButton1_Click()
Dim xlApp As Excel.Application
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
xlApp.Workbooks.Open "C:\lol\Book1.xlsx", True, False
Set xlApp = Nothing
Range("A8").Value = "Hello"
End
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误.
编译错误用户定义的类型未定义.
我错过了什么.任何人都可以共享示例代码片段来打开excel文件,更改单元格值并使用VBA在Powerpoint 2007和2010中关闭Excel文件.
我已经搜索了很多并尝试了不同的代码,但每次都得到相同的错误.:(
提前致谢.:)
我在Excel中创建了一个旋转3D图表的宏.我将图表复制到PowerPoint中,设置代码以在幻灯片显示时在PowerPoint中运行.代码运行,但我无法让它实际更改屏幕上显示的内容.幻灯片处于编辑模式时,图形会旋转.知道如何让代码不仅仅运行(我可以看到调试数字显示),但在演示模式下更新屏幕?我的代码是:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub SpinTheChart()
RotateX = ActivePresentation.Slides(2).Shapes(2).Chart.ChartArea.Format _
.ThreeD.RotationX
Do While ActivePresentation.SlideShowWindow.View.CurrentShowPosition = 2
RotateX = RotateX + 7
If RotateX > 360 Then RotateX = RotateX - 360
ActivePresentation.Slides(2).Shapes(2).Chart.ChartArea.Format _
.ThreeD.RotationX = RotateX
DoEvents
Sleep 125
Debug.Print RotateX
Loop
End Sub
Sub OnSlideShowPageChange()
Dim i As Integer
i = ActivePresentation.SlideShowWindow.View.CurrentShowPosition
If i = 2 Then SpinTheChart
End Sub
Run Code Online (Sandbox Code Playgroud)
更新:我还在打这个.似乎有些建议说更新当前显示的图表,您需要在DoEvents下面使用:
SlideShowWindows(1).View.GotoSlide SlideSowWindows(1).View.CurrentShowPosition
Run Code Online (Sandbox Code Playgroud)
但这不起作用.它退出正在运行的任何代码.因此,第一个函数中的Do/Loop退出,并且不会继续进行第二次迭代.
我正在尝试使用进度指示将.pptx文件转换为.mp4视频文件.我正在使用Python 2.7.6以及win32com.client模块,以便在Microsoft Powerpoint 2013中自动执行一些操作.
到目前为止这是我的代码:
import win32com.client
powerpoint = win32com.client.Dispatch("Powerpoint.Application")
presentation = powerpoint.Presentations.Open(FileName='myFile.pptx',
WithWindow=False)
try:
# May need a few other parameters as well
presentation.CreateVideo('out.wmv')
except:
raise SystemExit
Run Code Online (Sandbox Code Playgroud)
我的问题是我没有得到导出到视频进展的迹象.我知道这些信息是可用的,因为从应用程序中导出视频时,Powerpoint本身会显示一个确切的进度条.
到目前为止,我设法检索的唯一信息是轮询该CreateVideoStatus属性,该属性仅告诉我转换是否已经结束.
while presentation.CreateVideoStatus == 1:
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
然而,根据这篇文章Powerpoint 2013 - 导出到视频的进展,用户Steve Rindsberg建议我们应该使用ResampleMediaTasks对象及其PercentComplete()方法来获得进展.
关于如何在Python中实现这一点的任何想法?
我正在尝试制作一个数学练习powerpoint,其中学生将使用数字1 - 20来呈现随机添加问题.我一直在使用David Marcovtiz(和其他人)的教程,并使用他的代码作为起点.由于我的观众是年轻学生,我希望数学问题不是在消息框中,而是在文本框或形状之类的东西,我可以自定义,并为年轻学生提供大的视觉吸引力.
所以,我想要做的......在一个powerpoint节目中
如果答案不正确,则消息或图片会闪烁然后消失.
自动/随机生成新的添加问题我想将添加问题的数量设置为例如20,然后将幻灯片移动到评分幻灯片,该幻灯片显示他们在图片中的分数,例如每个正确答案的星号.
更新:使用Activex文本框:
我已经成功使用activex文本框,能够随机显示两个数字并将它们相乘并在第三个activex文本框中显示答案,我将其隐藏在幻灯片中.我使用第四个作为输入框,让学生输入他们的答案.如果这与第三个框中的答案相同,我可以显示一个星形并清除框然后移动到下一张幻灯片.如果它不一样,我可以去显示另一张图片,然后转到下一张幻灯片.(我原本希望幻灯片更新并使用一张幻灯片提出20个问题,但发现这很困难.)
目前,这需要单击三个命令按钮.
到目前为止我所管理的内容(我知道这对你来说似乎很难过,可能不稳定,但对我来说是一项重大成就,并且'比特'正在运作)我可以管理它用于乘法但是当我+值时,例如9 + 3 ,我得到93
Private Sub CommandButton1_Click()
TextBox1.Value = Int(10 * Rnd)
TextBox2.Value = Int(10 * Rnd)
TextBox3.Value = TextBox1.Value * TextBox2.Value
End Sub
Private Sub CommandButton2_Click()
If TextBox4.Value = TextBox3.Value Then
ActivePresentation.Slides("problem").Shapes("badge5").Visible = True
ActivePresentation.Slides("score").Shapes("badge5").Visible = True
Else
ActivePresentation.Slides("problem" _).Shapes("incorrect").Visible = True
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
End If
End Sub
Private Sub CommandButton3_Click()
SlideShowWindows(1).View.Next …Run Code Online (Sandbox Code Playgroud) 我环顾四周.我能找到的只是在Excel或Excel中调整大小.
我正在从pdf粘贴一张图片,需要点击一下调整大小和定位.
我有一些代码需要我知道SlideIndex要操作的内容(例如,插入新幻灯片的位置,插入ChartObject的位置等).大约99%的时间,我可以成功获得SlideIndex:
Dim w as Long 'slide index variable
w = ActivePresentation.Windows(1).Selection.SlideRange(1).SlideIndex
Run Code Online (Sandbox Code Playgroud)
另外0.1%的时间,ActivePresentation.Windows(1).SelectionType = ppSelectionNone它会失败,因为(可以理解)它无法获得SlideIndex选择,因为没有选择.如果用户无意中"选择"了"大纲"窗格中两个幻灯片之间的空间,则可能会发生这种情况.
理想情况下,我想要做的是获取SlideIndex幻灯片的属性,该属性在幻灯片窗格中可见:
我目前有一些代码测试是否SelectionType是ppSelectionNone,所以我可以捕获条件,我只是没有找到一种方法来识别幻灯片窗格的slideIndex.
Function GetMySlide()
Dim w as Long
If Not ActivePresentation.Windows(1).Selection.Type = ppSelectionNone Then
w = ActivePresentation.Windows(1).Selection.SlideRange(1).SlideIndex
Set GetMySlide = ActivePresentation.Slides(w)
Else:
MsgBox "No slide is currently selected. Please select a slide in the Outline pane in order to proceed.", vbInformation
Set GetMySlide = Nothing
Exit Function
End If
End Function
Run Code Online (Sandbox Code Playgroud)
更新 …
我有以下VBA代码来创建一个新的PowerPoint幻灯片:
longSlideCount = ActivePresentation.Slides.Count
With ActivePresentation.Slides
Set slideObject = .Add(longSlideCount + 1, ppLayoutTitle)
End With
Run Code Online (Sandbox Code Playgroud)
...插入'ppLayoutTitle'类型的新幻灯片,但我想知道是否可以在'幻灯片母版视图'中创建自定义布局,然后将该特定幻灯片模板插入到演示文稿中?
提前致谢!!!
在演示模式下,我只希望未隐藏的幻灯片以连续的页码显示。如何避免计算隐藏的幻灯片?
powerpoint-vba ×10
powerpoint ×8
vba ×5
vsto ×2
excel ×1
excel-vba ×1
python ×1
pywin32 ×1
random ×1