То, что вы пытаетесь сделать, - это создать заливку, которая не работает, потому что рассматриваемая форма - это картинка. Вы можете попробовать это сами в PowerPoint. Установка заливки для изображения не имеет никакого эффекта, поскольку исходное изображение все еще видно. Вот почему вы не видите результата.
Вы не можете изменить само изображение, вы должны удалить его, а затем заменить. Таким образом, вы можете изменить необходимый раздел вашего кода следующим образом:
Set shp = oSlide.Shapes("Picture")
'Capture properties of the existing picture such as location and size
With shp
t = .Top
l = .Left
h = .Height
w = .Width
End With
shp.Delete 'Delete old shape
Set shp = oSlide.Shapes.AddPicture("C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg", msoFalse, msoTrue, l, t, w, h)
shp.Name = "Picture"
shp.ScaleHeight Factor:=1, RelativeToOriginalSize:=msoTrue
shp.ScaleWidth Factor:=1, RelativeToOriginalSize:=msoTrue
Конечно, вы можете сделать свою первоначальную форму прямоугольником (или другими объектами рисования), а затем заполнить рисунком. В этом случае вы всегда можете изменить Fill и используемую для этого картинку, примерно так:
Dim link as String 'set this to the address of the picture you want to use to fill
oSlide.Shapes(shp).Fill.UserPicture(link)
Но если исходной формой является само изображение, вы обычно не можете заполнить его другим изображением.