vba - 更改纵横比而不失真且边缘没有黑条(取决于播放的屏幕尺寸)
问题描述
我有一组两个 PowerPoint 演示文稿,我使用 VBA 进行了编码以进行交互(一个具有允许在另一个中导航的按钮)。最初这些将显示在静态屏幕上,所以我定义了它们的大小以完美地适应屏幕,以便它们填满屏幕并彼此相邻,看起来像一个应用程序。但是,由于 Covid,现在将在演讲厅的投影仪上显示,每次使用不同的笔记本电脑,因此我需要动态演示并根据用户的屏幕进行调整。
我设法编写这样的代码,以便演示文稿根据用户填充屏幕。查看我的代码(请注意,此代码不会打开两个演示文稿,因为我在外部也有代码,因此可以通过单击 VBScript 文件在外部打开整个内容):
Sub Resize_Presentations()
Dim PPT1 As Object
Set PPT1 = CreateObject("PowerPoint.Application")
Set PPT1 = Presentations("Stand-up Wall - From Drive\Stand Up Title Page - With Macros.pptm")
Dim PPT2 As Object
Set PPT2 = CreateObject("PowerPoint.Application")
Set PPT2 = Presentations("Stand Up Summary and Breakdowns - With Macros.pptm")
'define screen height and width for resizing'
PPT1.Application.ActiveWindow.WindowState = ppWindowMaximized
windWidth = Application.Width
windHeight = Application.Height
'minimise windows for playing presentations'
PPT1.Application.ActiveWindow.WindowState = ppWindowMinimized
PPT2.Application.ActiveWindow.WindowState = ppWindowMinimized
'play title presentation in defined size'
With PPT1.SlideShowSettings
.ShowType = ppShowTypeSpeaker
With .Run
.Top = 0
.Left = 0
.Width = windWidth / 3
.Height = windHeight
End With
End With
'play breakdown and summary presentation in defined size'
With PPT2.SlideShowSettings
.ShowType = ppShowTypeSpeaker
With .Run
.Top = 0
.Left = windWidth / 3
.Width = (windWidth / 3) * 2
.Height = windHeight
End With
End With
End Sub
Sub Open_Presentation()
Dim Ret
Dim Ret2
Dim PPT1 As Object
Set PPT1 = CreateObject("PowerPoint.Application")
Dim PPT2 As Object
Set PPT2 = CreateObject("PowerPoint.Application")
Ret = IsWorkBookOpen("C:\Users\RobinsonH7\Desktop\Stand-up Wall - From Drive\Stand Up Title Page - With Macros.pptm")
Ret2 = IsWorkBookOpen("C:\Users\RobinsonH7\Desktop\Stand-up Wall - From Drive\Stand Up Summary and Breakdowns - With Macros.pptm")
If Ret = True And Ret2 = False Then
Set PPT1 = Presentations("Stand-up Wall - From Drive\Stand Up Title Page - With Macros.pptm")
Set PPT2 = Presentations.Open(FileName:="C:\Users\RobinsonH7\Desktop\Stand-up Wall - From Drive\Stand Up Summary and Breakdowns - With Macros.pptm")
Call Resize_Presentations
Else: MsgBox "Close all stand-up wall slides"
End If
End Sub
Function IsWorkBookOpen(FileName As String)
Dim ff As Long, ErrNo As Long
On Error Resume Next
ff = FreeFile()
Open FileName For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0
Select Case ErrNo
Case 0: IsWorkBookOpen = False
Case 70: IsWorkBookOpen = True
Case Else: Error ErrNo
End Select
End Function
我尝试添加的内容:
- 根据打开演示文稿的屏幕同时调整实际幻灯片大小的代码,这不起作用,因为它重新缩放了页面上的所有项目并使其变得一团糟。还尝试将所有对象分组并执行此操作,但仍然无效。
- 我尝试访问 MasterSlide 对象并调整它的大小,看看这是否可以仅增加幻灯片大小而不是对象。但是,我无法让它工作,似乎无法直接访问 MasterSlide 对象。
- 使用调整大小的空白演示文稿,然后复制和粘贴其他演示文稿中的所有内容,以便正确定位,但这会弄乱布局并且非常非常慢,我宁愿避免使用此选项。
理想情况下,我只想调整演示文稿在播放时的呈现方式,就像演示文稿被拉伸或缩放以适应空间一样。任何帮助将不胜感激!
提前致谢!
解决方案
由于 PowerPoint 的开发历史,到达幻灯片母版的语法有点神秘。您指的是设计而不是 SlideMaster!以下是评估是否存在多个幻灯片母版的声明:
If ActivePresentation.Designs.Count > 1 Then
要对具有多个幻灯片母版的演示文稿中的幻灯片母版形状进行操作:
For Z = 1 To ActivePresentation.Designs.Count
For Each objShape In ActivePresentation.Designs(Z).SlideMaster.Shapes
调整大小后,您的代码必须找到每个形状以将它们调整回原来的比例。在 2010 年之后的所有 PowerPoint 版本中,演示文稿高度保持在 7.5" 不变,只有宽度变化。4x3 为 10",16x10 为 12",16x9 为 13.33"。因此,您实际上只需要更改图形的宽度即可将它们恢复到正确的比例。
作为替代方法,您可以使用PPTools Resize之类的加载项。或者您可以使用具有 4x3、16x10 和 16x9 纵横比变体的 SuperTheme,它将覆盖 99.99% 的显示器。以下是有关 SuperThemes 如何工作的更多信息:SuperThemes
推荐阅读
- android - Google Play IAP 中目标用户的订阅折扣
- javascript - 在我用 php 中的 FILTER_SANITIZE_STRING 检查值后,我是否需要前端 js 中的 htmlspecialchars()
- excel - Excel VBA - 将下拉选择中的值粘贴到列中
- flutter - Flutter:外部小部件的 setState
- ruby-on-rails - ROR - 如何在父模型的范围内使用子模型的范围
- android-studio - 在 Android Studio 上运行从 GitHub 克隆的应用时找不到资源错误
- php - 提取元素
- python-3.x - [python3][windows] 如何用重读字符读取行?
- google-sheets - 索引导致两张纸之间的参数错误,GOOGLE SHEETS
- neo4j - Neo4j Cypher 选择在哪里存在查询