Ashwin,
Два совета, которые не очевидны для новых пользователей VBA:
1) ВСЕГДА запускайте каждый модуль с Option Explicit.Если вы идете в Инструменты |Варианты |Откройте вкладку «Редактор» и установите флажок «Требовать декларацию переменной», VBA сделает это автоматически.Если вы не на Mac.
1a) Если в именах переменных вы используете регистр другого типа ... FilePath или Filepath, а не filepath ... вы можете вводить имена любым удобным вам способом, и редактор VBA изменит корпус начто ты объявилЕсли этого не произойдет, вы знаете, что либо неправильно набрали имя переменной, либо вообще не объявили ее.
2) ВСЕГДА выбирайте Debug |Скомпилируйте, прежде чем пытаться запустить ваш код.Продолжайте компилировать, пока не найдете и не исправите все ошибки компилятора.
Вот модифицированная версия вашего кода.У меня не было времени настроить набор тестовых презентаций, чтобы опробовать его, но я дам больше, чем даже шансы, что у вас есть такая возможность.Дайте ему шанс, дайте нам знать, как это работает.
Option Explicit
Sub Insert_Slides()
Dim sl As Slide
Dim tbl As Table
Dim shp As Shape
Dim filepath As String
' These need to be Longs, not Strings
Dim slidestart As Long
Dim slideend As Long
Set sl = ActivePresentation.Slides(1)
Set tbl = sl.Shapes("Contents").Table
' Use SET to assign objects to object variables, but not to assign values to
' string/numeric variables such as you're using.
' AND never select anything unless there's an absolute need to. It can slow your code down by a factor of 10 and
' can prevent it from running in some circumstances.
' AND by using With/End With you can shorten the code considerably;
' easier to read and, at least in theory, runs a bit faster
' SO ...
'Set filepath = ActivePresentation.Slides(1).Shapes("Contents").Table.Cell(2, 1).Select
With ActivePresentation.Slides(1).Shapes("Contents").Table
filepath = .Cell(2, 1).Shape.TextFrame.TextRange.Text
' since the table cells contain text (strings), you should convert them to Longs before assigning
' them to a Long variable:
slidestart = CLng(.Cell(2, 2).Shape.TextFrame.TextRange.Text)
slideend = CLng(.Cell(2, 3).Shape.TextFrame.TextRange.Text)
End With
' and you might want to add a test here;
' make sure the file exists before trying to access it:
If Len(Dir$(filepath)) > 0 Then
ActivePresentation.Slides.InsertFromFile _
filepath, 1, slidestart, slideend
Else
MsgBox "Cannot locate file " & filepath
End If
End Sub