所以我知道如何在PowerPoint中用VB命名文本框或类似对象,但我想知道是否有办法通过功能区命名对象(PowerPoint 2007).例如,如果我在幻灯片上添加一个文本框,有没有办法为它指定一个名称(有点像访问中的属性窗口,或者在左上角的Excel 2003中可以输入名称的文本框) ?
基本上我以后可以在代码中引用它; 无需使用代码来命名我在事后添加的每个对象.也许通过功能区更简单的方法?
第一次海报,所以如果有任何格式或指导我没有遵守,请告诉我,以便我可以解决它.
所以我基本上要求用户提供excel文件的文件目录,然后设置一些变量(最初设置为public作为项目变量,因为这些变量在其他地方被使用和更改).我还添加了行来将这些变量设置为空(以防万一,我不认为它应该重要).然后我将这些变量设置为我想要访问的excel文件,工作簿和工作表.
Dim filepath as String
filePath = CStr(fileDialog) 'ask file dir, set to string
Dim sourceXL As Variant 'these three were orig project variables
Dim sourceBook As Variant
Dim sourceSheet As Variant
Dim sourceSheetSum As Variant
Set sourceXL = Nothing 'set to nothing in case...?
Set sourceBook = Nothing
Set sourceSheet = Nothing
Set sourceSheetSum = Nothing
Set sourceXL = Excel.Application 'set to the paths needed
Set sourceBook = sourceXL.Workbooks.Open(filePath)
Set sourceSheet = sourceBook.Sheets("Measurements")
Set sourceSheetSum = sourceBook.Sheets("Analysis Summary") …Run Code Online (Sandbox Code Playgroud) 可能是一个非常愚蠢的问题,但我无法想象如何在PowerPoint中重命名对象.例如,我的所有图形默认调用"图1"等.有人可以帮助我吗?谢谢!
我正在使用Coded UI和VSTO自动化Powerpoint场景.在我的powerpoint演示文稿中,我在一个形状上创建了一个"动作"设置来启动记事本.在幻灯片放映期间,我需要通过单击"文本/形状"来调用此操作,以便它将打开notepad.exe.任何人都可以帮助我如何实现这一目标.我写了以下代码.
//To launch Powepoint
PowerPoint.Application objPPT = new PowerPoint.Application();
objPPT.Visible = Office.MsoTriState.msoTrue;
//Add new presentation
PowerPoint.Presentations oPresSet = objPPT.Presentations;
PowerPoint.Presentation oPres = oPresSet.Add(Office.MsoTriState.msoTrue);
//Add a slide
PowerPoint.Slides oSlides = oPres.Slides;
PowerPoint.Slide oSlide = oSlides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitleOnly);
//Add text
PowerPoint.TextRange tr = oSlide.Shapes[1].TextFrame.TextRange;
tr.Text = "Launch notepad";
tr.Select();
//Add Action settings on the shape
oSlide.Shapes[1].ActionSettings[PowerPoint.PpMouseActivation.ppMouseClick].Action = PowerPoint.PpActionType.ppActionRunProgram;
oSlide.Shapes[1].ActionSettings[PowerPoint.PpMouseActivation.ppMouseClick].Run = "c:\\windows\\notepad.exe";
//start slideshow
objPPT.ActivePresentation.SlideShowSettings.Run();
Run Code Online (Sandbox Code Playgroud)
这将启动演示文稿的幻灯片显示,并将显示第一张幻灯片''在形状上定义动作设置'.现在我如何通过API自动启动notepad.exe?遗憾的是,编码的UI无法检测幻灯片中的对象.因此可能无法使用UI鼠标单击选项.
[编辑]能够取得一点进展.在幻灯片放映期间我有形状对象.这是上述代码的扩展.
PowerPoint.SlideShowWindow oSsWnd = objPPT.ActivePresentation.SlideShowWindow;
PowerPoint.Shape oShape = oSsWnd.View.Slide.Shapes[1];
Run Code Online (Sandbox Code Playgroud) 例如,在Powerpoint中:
表示Shape对象中的文本框架.包含文本框架中的文本以及控制文本框架对齐和锚定的属性和方法.
表示Shape或ShapeRange对象中的文本框架.包含文本框架中的文本,并公开控制文本框架对齐和锚定的属性和方法.
所以TextFrame2也引用了ShapeRange对象,它比TextFrame有更多的属性.
我不确定何时或是否应该使用其中一个,例如,操纵powerpoint幻灯片上表格单元格中保存的文本值.两者似乎都有效,并且以下语句返回TRUE.
Dim tbl as Table
Set tbl = ActivePresentation.Slides(1).Shapes("Table1").Table
tbl.Cell(r, c).Shape.TextFrame2.TextRange.Characters.Text = _
tbl.Cell(r, c).Shape.TextFrame.TextRange.Characters.Text
Run Code Online (Sandbox Code Playgroud)
当我应该使用TextFrame何时使用vs时,是否有一些确定的指南TextFrame2?
使用"开始:使用上一个"设置的PowerPoint入口动画在新幻灯片前进时启动.但是,如果以相同方式设置退出动画,则不会以幻灯片结束序列开头.相反,需要使用"开始:单击"触发器,在退出动画结束后,您仍需要一次额外的单击才能进入下一张幻灯片.
对此的解决方法很明显:创建一个重复的幻灯片,让原始幻灯片中的结束动画成为复制幻灯片上的起始动画,然后让它们跟随您想要的任何内容,或者创建一个仅包含结束动画的过渡幻灯片并设置"更改高级幻灯片 - >自动后 - > [动画完成所需的时间]".
这些变通方法将使其在视觉上适合您的受众.但是,它会对您可能需要相应调整的幻灯片数量和/或重复的内容更改产生影响.如果您是唯一一个创建和使用您的演示文稿的人,这可能就好了.但是,如果您正在与另外三个人以协作模式创建演示文稿,并且甚至不知道最后谁将成为演示者,那么您可以搞砸了.
让我们具体一点:我的大多数幻灯片在入口动画中有0.2秒飞行,应用于来自右,底或左的内容块.前进到下一张幻灯片,我希望他们在另一个0.2秒的退出动画中飞出,接着是新幻灯片0.2s飞入新块的入口动画.通常,在前进到下一张幻灯片时应触发块的交换.
如上所述,如果幻灯片之间没有额外的点击,我就无法做到这一点.
我编写了一个VBA脚本,该脚本应该与退出动画一起启动,并在退出动画结束后0.3秒后自动前进幻灯片.这样我就可以摆脱现在需要的额外点击.
Sub nextslide()
iTime = 0.3
Start = Timer
While Timer < Start + iTime
DoEvents
Wend
With SlideShowWindows(1).View
.GotoSlide (ActivePresentation.SlideShowWindow.View.Slide.SlideIndex + 1)
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
在框,按钮或其他对象上绑定时,它可以很好地工作.但我不能让它单击(幻灯片上的任何位置)运行,以便它可以与退出动画onclick触发器一起启动.在整个幻灯片上创建一个大的透明矩形形状并将宏绑定在它上也无济于事.通过单击它您只能运行宏,不会触发退出动画.
无论如何,我不想将宏绑定到任何其他解决方法对象,而是幻灯片本身.
任何人都知道如何在幻灯片onclick事件上触发PowerPoint VBA脚本?
任何人都知道一个秘密设置,它将使退出动画按预期工作,即在转换到下一个幻灯片时退出幻灯片之前的动画?
谁知道怎么打败这条龙?
谢谢!
是否可以将带有自定义动画的图片从PowerPoint导出为动画gif?
I was provided an add-in for powerpoint as a .ppam file and another add-in for Excel as .xslm file. The add-in's work great, but I would like to customize them with some internal requirements.
My questions is - how to open the source code behind a .ppam file ( which I understand is a compiled version) to be able to perform the customizations.
我正在做一个项目.其中我想找出"我的文本框是否已经滑出幻灯片?" .如果是,则显示错误消息.
所以我的逻辑是,如果我找到幻灯片的尺寸,那么我将在IF中使用它...其他条件如:
If textbox_position < slide_dimension then
#Error
end if
Run Code Online (Sandbox Code Playgroud)
如果您有任何其他想法,请告诉我.
谢谢
我试图根据分配给对象的已知 Name属性创建一个将返回特定形状的CustomLayout.Shapes.Placeholder函数.我无法使用形状,.Name因为即使从模板/布局创建幻灯片,也不会提前知道.
挑战似乎是自定义布局与实际幻灯片的关系.例如,当我迭代幻灯片时.CustomLayout.Shapes.Placeholders,我可以通过它的.Name属性轻松识别特定的占位符.
但是,如果我返回此形状,它将是自定义布局占位符,它会影响此布局上的所有幻灯片(例如,如果我向此占位符添加文本,则使用此布局更新所有幻灯片!).显然这是不可取的!
相反,如果我索引集合,并尝试从幻灯片中返回该索引位置的形状.Shapes.Placeholders,则看起来它们没有保持相同的索引,即.Shapes.Placeholders(i) <> .CustomLayout.Shapes.Placholders(i)
尝试的解决方法:
以为我可以操纵自定义布局来添加Tag形状.我尝试了,但由于同样的原因它失败了(即,CustomLayout.Shape在某种程度上不是与Slide.Shape"相同"的形状......).在任何情况下,如果存在这样的事情,我希望避免采用"解决方法"来支持更合适的方法.
这是我到目前为止的功能:
Function GetShapeByPlaceholderName(sName As String, sld As Slide) As Object
Dim plchldrs As Placeholders
Dim shp As Shape
Dim ret As Shape
Dim i As Long
For Each shp In sld.CustomLayout.Shapes.Placeholders
i = i + 1
If shp.Name = sName Then
'####
' This can easily identify the CustomLayout.Shapes.PLACEHOLDER
'
' But …Run Code Online (Sandbox Code Playgroud) powerpoint-vba ×10
vba ×8
powerpoint ×6
excel-vba ×3
excel ×2
animation ×1
c# ×1
excel-2010 ×1
gif ×1
ms-office ×1
vb.net ×1
vsto ×1