'Several people have asked for a way to use VBA to make a hover button like is common 'on Web sites using JavaScript. That is, a button that does changes in some way as long 'as the mouse is hovering over it. Here is an example. 'Create 3 shapes and name them: 'RegularShape 'ClickedShape 'ReturnToRegular 'If you need help naming shapes, go to Example 8.7 on my site: 'http://www.PowerfulPowerPoint.com/ 'Now, for the shape named RegularShape link the Action Setting to: Sub DoTheHighlightThing() ActivePresentation.SlideShowWindow.View.Slide.Shapes _ ("ClickedShape").Visible = True End Sub 'For the ReturnToRegular, make that mostly transparent and larger than 'the other two shapes (just like the trick for hyperlinking to another 'slide), and have it run the macro on mouse over: Sub UndoTheHighlightThing() ActivePresentation.SlideShowWindow.View.Slide.Shapes _ ("ClickedShape").Visible = False End Sub 'The key here is to get your shapes positioned just right. The 'ReturnToRegular shape should be behind the others and slightly larger. 'The RegularShape should be next in order, and the ClickedShape should 'be on top and at least as big as the oRegularShape (otherwise we'll have 'to hide the RegularShape and that is more trouble than it is worth). 'Finally, you will need something to trigger the oClickedShape to hide 'before you get there. This can happen on some previous slide (I usually 'have a Get Started button on the first slide that cleans up stuff like 'this and moves on to the next slide): Sub GetStarted() ActivePresentation.Slides(2).Shapes("ClickedShape").Visible = False ActivePresentation.SlideShowWindow.View.Next End Sub 'I guess the button should do something when clicked, so here is something simple for 'it to do although it could be set to do something without VBA. Sub YouClicked() MsgBox "You clicked the button." End Sub 'OK. Your too lazy to go to Example 8.7, so here are the procedures for naming 'objects and slides. 'All these procedures run in Edit or Normal View, not SlideShow View 'This procedure returns the object name of the selected object 'in a MsgBox. It returns an error message if you have not selected 'an object or you have selected more than one object. Sub GetObjectName() If ActiveWindow.Selection.Type = ppSelectionShapes _ Or ActiveWindow.Selection.Type = ppSelectionText Then If ActiveWindow.Selection.ShapeRange.Count = 1 Then MsgBox (ActiveWindow.Selection.ShapeRange.Name) Else MsgBox ("You have selected more than one shape.") End If Else MsgBox ("No shapes are selected.") End If End Sub 'This procedure sets the name of an object to whatever you type. 'It returns an error message if you have not selected 'an object or you have selected more than one object. Sub SetObjectName() Dim objectName As String If ActiveWindow.Selection.Type = ppSelectionShapes _ Or ActiveWindow.Selection.Type = ppSelectionText Then If ActiveWindow.Selection.ShapeRange.Count = 1 Then objectName = InputBox(prompt:="Type a name for the object") objectName = Trim(objectName) If objectName = "" Then MsgBox ("You did not type anything. " & _ "The name will remain " & _ ActiveWindow.Selection.ShapeRange.Name) Else ActiveWindow.Selection.ShapeRange.Name = objectName End If Else MsgBox _ ("You can not name more than one shape at a time. " _ & "Select only one shape and try again.") End If Else MsgBox ("No shapes are selected.") End If End Sub 'The following procedures are just like the procedures above except that they 'do not check to make sure that you have one and only one object selected. Sub GetObjectNameNoError() MsgBox (ActiveWindow.Selection.ShapeRange.Name) End Sub Sub SetObjectNameNoError() Dim objectName As String objectName = InputBox(prompt:="Type a name for the object") objectName = Trim(objectName) If objectName = "" Then MsgBox ("You did not type anything. The name will remain " & _ ActiveWindow.Selection.ShapeRange.Name) Else ActiveWindow.Selection.ShapeRange.Name = objectName End If End Sub 'The following procedures are for getting and setting the names of slides. Sub GetSlideName() MsgBox ActiveWindow.View.Slide.Name End Sub Sub SetSlideName() Dim slideName As String slideName = InputBox(prompt:="Type a name for the slide") slideName = Trim(slideName) If slideName = "" Then MsgBox ("You did not type anything. " & _ "The name will remain " & _ ActiveWindow.View.Slide.Name) Else ActiveWindow.View.Slide.Name = slideName End If End Sub