Макрос на основе VBA для PPT, который вставляет файлы JPEG в отдельные слайды - PullRequest
0 голосов
/ 20 марта 2020

У меня есть макрос на основе VBA для PPT, который вставляет файлы JPEG в отдельные слайды (см. «Макрос 1» ниже). Мой вопрос:

【Мой вопрос】
Я хочу добавить следующую функцию в 【Макрос 1】;
Автоматически вставлять имя файла вставленного изображения в каждый слайд.

Я попытался вставить имя файла, используя «ActiveWindow.Selection.SlideRange.Name» и т. Д. c., Но макрос, кажется, останавливается, если такое описание вставлено.

【Макрос 1】
Вы можете загрузить оригинальную версию этого макроса с здесь . Этот макрос является модифицированной версией макроса Ref1. Связанный макрос может автоматически вставлять изображения в слайды без ошибок, , но он не может использовать имя изображения в качестве имени слайда .

(изменено в 2020/03/29 JST)
Макрос на Box1 ниже является одним из прототипов макросов, которые были созданы при попытке добавить нужные функции в вышеупомянутый макрос. Я изменил на основе совета в ответе, но я получаю ошибку времени выполнения. Я пробовал добавлять разные места, но результат один и тот же.

(изменено в 2020/03/31 JST) Вот завершенная версия: этот макрос успешно отвечает моим требованиям, описанным в «Мой вопрос». Следующее (ref2) было очень полезно при создании этого макроса. Вы можете загрузить эту версию макроса из здесь

[Box1] (изменено в 2020/03/31 JST)

Sub InsertImages()
'Insert all image files from the same level folder
Dim prs As PowerPoint.Presentation
Dim sld As PowerPoint.Slide
Dim shp As PowerPoint.Shape
Dim txt As PowerPoint.Shape
Dim tmp As PowerPoint.PpViewType
Dim fol As Object, f As Object
Dim fol_path As String
'Store open presentation in prs
Set prs = ActivePresentation

'Cancel if slide show mode
If SlideShowWindows.Count > 0 Then prs.SlideShowWindow.View.Exit

With ActiveWindow
tmp = .ViewType 'Remember window display mode
.ViewType = ppViewSlide
End With

'Get the path of the folder where this ppt file are.
fol_path = ActivePresentation.Path

  'Processing files in the folders
With CreateObject("Scripting.FileSystemObject")
If Not .FolderExists(fol_path) Then GoTo Fin

For Each f In .GetFolder(fol_path).Files
'Process only JPEG files
Select Case LCase(.GetExtensionName(f.Path))
Case "jpg", "jpeg"
'Add slids
Set sld = prs.Slides.Add(prs.Slides.Count + 1, ppLayoutChartAndText)
sld.Select
'Insert image
Set shp = sld.Shapes.AddPicture(FileName:=f.Path, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=0, _
Top:=0)
With shp
.LockAspectRatio = True 'Fix the aspect ratio

'Fit inserted image to slide size
            If .Width > .Height Then
              .Width = prs.PageSetup.SlideWidth
            Else
              .Height = prs.PageSetup.SlideHeight
            End If
.Select

'Resize image
.Width = .Width * 0.85
.Height = .Height * 0.85
End With

'Center image on slide
With ActiveWindow.Selection.ShapeRange
.Align msoAlignCenters, True
.Align msoAlignMiddles, True
End With

'Change slide title to file name
sld.Shapes(1).TextFrame.TextRange.Text = f.Name
'Insert Text
'Set txt = sld.Shapes.AddTextbox( _
'Orientation:=msoTextOrientationHorizontal, _
'Left:=600, _
'Top:=50, _
'Width:=250, _
'Height:=10)

'   With txt
'   .Name = "AddedTextBox"
'   .TextFrame.TextRange = "free text"
'   .TextEffect.FontSize = 20
'   End With
End Select
Next
End With
Fin:
ActiveWindow.ViewType = tmp 'Restore window display mode
End Sub


【 Ссылки る
(ссылка 1) PowerPoint 10 ク ロ , написано на японском языке.
(ссылка 2) ワ ン ン BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA , написано на японском языке.

1 Ответ

0 голосов
/ 22 марта 2020

Вы добавляете пустой слайд, а затем пытаетесь записать текст в несуществующий заполнитель заголовка. Измените макет на ppLayoutObject, чтобы получить макет заголовка и содержимого.

Тогда вам также придется отправить изображение на оборотную сторону, потому что оно будет поверх заполнителя заголовка. Добавление этой строки сделает это:

          With ActiveWindow.Selection.ShapeRange
            .ZOrder msoSendToBack <!--Add this to send image to back-->
            .Align msoAlignCenters, True
            .Align msoAlignMiddles, True
          End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...