#excel #vba #powerpoint
#excel #vba #powerpoint
Вопрос:
хорошо, так что я застрял на некоторое время и не знаю, как решить эту проблему.
Ситуация: у меня есть файл Excel с данными, в котором я отфильтровываю данные, которые хочу экспортировать. Там у меня уже есть макрос, который экспортирует мне выделение в PowerPoint (и это работает просто отлично).
До сих пор у меня есть фиктивное изображение на слайдах PPT, которое я должен изменить вручную. Я хочу это изменить. Я хочу вставить генератор случайных чисел, который вставляет случайное изображение из набора изображений в папку на моем компьютере. .
Я понимаю основы того, как работает генератор случайных чисел, но я далеко не понимаю, как применить это к моему случаю, и где я должен вставить генератор в код.
Вот мой код для преобразования Excel в PPT.
Sub XLS_to_PPT()
Dim pptPres As Presentation
Dim strPfad As String
Dim strPOTX As String
Dim pptApp As Object
Dim strSave As String
strPfad = Application.ActiveWorkbook.Path
strPOTX = "Credential_PPT_Template.pptx"
strSave = Application.ActiveWorkbook.Path
Set pptApp = New PowerPoint.Application
pptVorlage = strPfad amp; "" amp; strPOTX
pptApp.Presentations.Open Filename:=pptVorlage, untitled:=msoTrue
Set pptPres = pptApp.ActivePresentation
For Each tableRow In Sheets("Credentials").ListObjects("Credential_Submission").DataBodyRange.SpecialCells(xlCellTypeVisible).Rows
Set newSlide = pptPres.Slides(1).Duplicate
newSlide.Shapes("PMOTeamSize").TextFrame.TextRange.Characters.Text = tableRow.Columns(69).Value
newSlide.Shapes("TeamSize").TextFrame.TextRange.Characters.Text = tableRow.Columns(65).Value
newSlide.Shapes("Header").TextFrame.TextRange.Characters.Text = tableRow.Columns(4).Value
newSlide.Shapes("ClientChanlenge").TextFrame.TextRange.Characters.Text = tableRow.Columns(75).Value
newSlide.Shapes("HowWeHelped").TextFrame.TextRange.Characters.Text = tableRow.Columns(76).Value
newSlide.Shapes("ClientBenefitsDelivered").TextFrame.TextRange.Characters.Text = tableRow.Columns(77).Value
Next tableRow
pptPres.Slides(1).Delete
pptPres.SaveAs strSave amp; "" amp; ("New_Request")
pptPres.Close
Set pptPres = Nothing
Set pptApp = Nothing
End Sub
Комментарии:
1. Просто чтобы понять вас: ваш вопрос о том, как вставить случайное изображение из папки, а не о Excel в Powerpoint?
2. Да, я запускаю код Excel в PPT (это работает) В том же случае, когда я создаю слайд PPT с информацией из Excel, я хочу вставить случайное изображение из файла на тот же слайд.
3. И ваш вопрос о том, как выбрать случайное изображение или как вставить картинку в PowerPoint?
4. Как вставить случайное изображение в PowerPoint.
Ответ №1:
Одним из подходов является:
Public Function GetRandImageFile(imFolder As String) As String
Static list As Collection
Static lastFolder As String
If list Is Nothing Or lastFolder <> imFolder Then
On Error GoTo out
lastFolder = imFolder
Set list = New Collection
cnt = 0
Set fs = CreateObject("Scripting.FileSystemObject")
Set fd = fs.getfolder(lastFolder)
For Each f In fd.Files
pos = InStrRev(f.Name, ".")
ext = ""
If pos > 0 Then ext = LCase(Mid(f.Name, pos))
Select Case ext
Case ".jpg", ".png", ".bmp" ' and so on
list.Add f.Name, CStr(cnt)
cnt = cnt 1
End Select
Next
End If
Randomize
slash = IIf(Right(lastFolder, 1) <> "", "", "")
GetRandImageFile = lastFolder amp; slash amp; list(Rnd() * (list.Count - 1) 1)
out:
End Function
Комментарии:
1. Осторожно, ваш индекс в
list
будет генерировать значения от 0 до list. Количество — 1, но коллекции начинаются с индекса 1. И ваши случайные значения распределяются неравномерно, поскольку вы (неявно) используете округление, а не усечение.2. Также следует упомянуть: используйте
lCase
onext
для поиска файлов с именами в верхнем регистре. И вы могли бы использоватьext = lcase(fs.GetExtensionName(f))
. И я бы поместил часть, которая получает случайное имя файла, в отдельную функцию.