Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


В общем, что я вижу.

1. В результате произведённого изменения пропорций произошло не «растягивание»:
Цитата kosmonavtom:
При изменении размеров слайдов с 4:3, на 16:9 в PowerPoint 2007 изображения растягиваются причем только по ширине слайдов презентации. »
изображений, а сжатие по высоте. Поэтому «растягивание» приведёт только к тому, что рисунки и объекты «уползут» за размеры слайда.

2. Ваш алгоритм работоспособен только при условии, что изображения, помещённые в презентацию изменялись строго пропорционально. Если же изображение до конвертации с 4:3 в 16:9 уже имело иные пропорции, нежели 1x1, что отнюдь не редкость — то весь алгоритм летит к чёрту.

Так что, я бы сделал иначе. Пробуйте:
Скрытый текст
Код: Выделить весь код
Option Explicit

Sub ReScaleToHeight()
    Dim objSlide As Slide
    Dim objShape As Shape
    
    Dim intCurrentWidth As Integer
    Dim intCurrentHeigth As Integer
    
    Dim intOriginalWidth As Integer
    Dim intOriginalHeigth As Integer
    
    Dim sngAspectRatio As Single


    For Each objSlide In ActivePresentation.Slides
        For Each objShape In objSlide.Shapes
            With objShape
                If .Type = msoPicture Or .Type = msoEmbeddedOLEObject Then
                    intCurrentWidth = .Width
                    intCurrentHeigth = .Height
                    
                    .ScaleHeight CSng(1), msoTrue
                    .ScaleWidth CSng(1), msoTrue
                    
                    intOriginalWidth = .Width
                    intOriginalHeigth = .Height
                    
                    If intCurrentWidth / intOriginalWidth < intCurrentHeigth / intOriginalHeigth Then
                        sngAspectRatio = intCurrentWidth / intOriginalWidth
                    Else
                        sngAspectRatio = intCurrentHeigth / intOriginalHeigth
                    End If
                    
                    .ScaleHeight sngAspectRatio, msoTrue
                    .ScaleWidth sngAspectRatio, msoTrue
                End If
            End With
        Next
    Next
End Sub

Если всё же хотите по-своему — поменяйте в условии < на >.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:57, 10-02-2019 | #4