Ваш код повторяет все слайды с помощью Для x = 1 To .Slides.Count , а затем повторяет все слайды снова с Для каждого oSl In ActivePresentation.Slides .Вам не нужны оба.
Ниже приведена упрощенная версия вашего кода.Это только проходит через слайды один раз.Он удаляет текстовое поле SlideInfo, если оно существует (используя On Error Resume Next, чтобы поймать ошибку) ... но вы можете очистить это позже :) ... и затем заново чистить текстовое поле каждый раз.
Option Explicit
Sub AddSlideInfo()
Const cShapeName = "SlideInfo"
Dim oSh As Shape
Dim oSl As Slide
On Error Resume Next
With ActivePresentation
For Each oSl In ActivePresentation.Slides
With oSl
.Shapes(cShapeName).Delete
Set oSh = .Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal, Left:=0, Top:=-120, Width:=300, Height:=90)
oSh.Name = cShapeName
'Add some formatting and dummy text
With oSh.TextFrame.TextRange
.Font.Name = "Berlin Sans Demi"
.Font.Size = 12
.Text = _
"Slide Info: " & vbNewLine & _
"Slide Index: " & oSl.SlideIndex & vbNewLine & _
"Slide ID: " & oSl.SlideID
End With
End With
Next
End With
End Sub