Доступ к мастер-слайдам для нескольких тем в одной презентации

#vba #powerpoint

Вопрос:

Я работал над макросом VBA, который автоматически создает водяной знак на мастер-слайде для нескольких именованных людей, а затем автоматически сохраняет его в отдельные PDF-файлы. Все это хорошо работает сейчас. Однако в некоторых презентациях, которые мне, возможно, потребуется пометить водяными знаками, к разным слайдам применяется несколько тем. (например, первая половина использует тему 1, а вторая половина использует тему 2) Каждая тема имеет отдельный мастер-слайд. Когда я использую активное представление.Мастер слайдов, это влияет только на верхний главный слайд в представлении Мастер слайдов. Как бы я мог получить доступ к мастер-слайдам для других тем?

Редактировать: Вот код, который у меня есть. Переменные XL берутся из файла Excel. Строка водяного знака относится к текстовому полю, расположенному дальше всего назад. Я искал способ доступа к нескольким мастер-слайдам, но ничего не смог на них найти.

 xlName = Range("A" amp; CStr(count)) xlCompany = Range("B" amp; CStr(count)) xlDate = Range("C" amp; CStr(count)) xlMail = Range("D" amp; CStr(count))  'Create the watermark ActivePresentation.SlideMaster.Shapes(1).TextFrame.TextRange.text = "Confidential - Do Not Share" amp; vbNewLine amp; "Issued to " _ amp; xlName amp; vbNewLine amp; "on " amp; xlDate amp; vbNewLine amp; xlCompany amp; " - Internal Use Only"  

Комментарии:

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

Ответ №1:

Вот пример кода, который будет что-то делать (что вы определяете) с каждым мастером (ODEs.SlideMaster в коде) и макетом (oLay) в презентации.

Измените DoSomethingWithShapeContainer, чтобы сделать все, что вам нужно, для каждого мастера/макета.

 Sub AllMastersAndLayouts()  Dim oLay As CustomLayout Dim oDes As Design  With ActivePresentation  For Each oDes In .Designs  Call DoSomethingWithShapeContainer(oDes.SlideMaster)  For Each oLay In oDes.SlideMaster.CustomLayouts  Call DoSomethingWithShapeContainer(oLay)  Next Next  End With   End Sub  Sub DoSomethingWithShapeContainer(oShapeContainer As Object)  With oShapeContainer.Shapes.AddTextbox(msoTextOrientationHorizontal, 20, 20, 200, 50)  .TextFrame.TextRange.Text = "I did something here"  End With End Sub  

Комментарии:

1. Спасибо! Это делает именно то, что мне было нужно!

2. Однако еще один вопрос. Не знаете ли вы, возможно ли, чтобы макрос скопировал фигуру с одного слайда, а затем добавил ее на несколько основных слайдов?

3. Чтобы скопировать фигуру: Активное представление. Слайды(xxx).Фигуры(«Имя фигуры»). Скопируйте [замените индекс слайда на xxx и фактическое имя фигуры на «Имя фигуры»]. Поэтому вместо вставки текстового поля в подпрограмму doSomething вы могли бы: ActivePresentation. Слайды(1). Формы(3). Скопируйте oShapeContainer. Формы. Вставить