Вставить конкретные слайды из других презентаций в текущий на основе входных данных, представленных в таблице - PullRequest
0 голосов
/ 07 сентября 2018

Я совсем новичок в VBA (меньше недели). Я пытаюсь создать макрос, который будет вставлять слайды в текущую презентацию на основе пути к файлу и диапазона слайдов, указанных в таблице на слайде 1. Я создал следующий код, но думаю, что я делаю что-то не так, так как он не работает , Пожалуйста, помогите ...

Sub Insert_Slides()

Dim sl As Slide
Dim tbl As Table
Dim shp As Shape

Dim filepath As String
Dim slidestart As String
Dim slideend As String

Set sl = ActivePresentation.Slides(1)
Set tbl = sl.Shapes("Contents").Table

Set filepath = ActivePresentation.Slides(1).Shapes("Contents").Table.Cell(2, 1).Select
Set slidestart = ActivePresentation.Slides(1).Shapes("Contents").Table.Cell(2, 2).Select
Set slideend = ActivePresentation.Slides(1).Shapes("Contents").Table.Cell(2, 3).Select

ActivePresentation.Slides.InsertFromFile _
    filepath, 1, slidestart, slideend

End Sub

1 Ответ

0 голосов
/ 07 сентября 2018

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...