2014-03-22 3 views
0

Я хочу выполнить различные варианты форматирования изображений в слайдах.Форматирование изображений без выбора

Макрос работает на изображениях, которые я выбрал на слайде, но я бы хотел запустить макрос, не выбирая изображения.

Вот как я в настоящее время работы с изображениями (в данном случае выравнивание изображения в горизонтальном центре слайда) и кусок кода, который я ищу помощи замены:

With ActiveWindow.Selection.ShapeRange 
.Align (msoAlignCenters), msoTrue 
End With 

Вот весь код тела до сих пор:

Sub TestCenterImage() 
Dim osld As Slide 
Dim oshp As Shape 

For Each osld In ActivePresentation.Slides 
If osld.SlideIndex > 1 Then Exit Sub 'I don't know if I need this line 
For Each oshp In osld.Shapes 
    If CheckIsPic(oshp) = True Then 'Making sure that we're only working with images 
    With ActiveWindow.Selection.ShapeRange 'The portion of code I need help with 
    .Align (msoAlignCenters), msoTrue 
    End With 
    End If 
Next oshp 
Next osld 
End Sub 

Function CheckIsPic(oshp As Shape) As Boolean 
If oshp.Type = msoPicture Then CheckIsPic = True 
If oshp.Type = msoPlaceholder Then 
    If oshp.PlaceholderFormat.ContainedType = msoPicture Then CheckIsPic = True 
End If 
End Function 

ответ

0

Попробуйте этот путь вместо этого:

Sub TestCenterImage() 
Dim osld As Slide 
Dim oShp As Shape 

For Each osld In ActivePresentation.Slides 
'If osld.SlideIndex > 1 Then Exit Sub 'I don't know if I need this line 
For Each oShp In osld.Shapes 
    If CheckIsPic(oShp) = True Then 'Making sure that we're only working with images 
    CenterOnSlide oShp 
    'End With 
    End If 
Next oShp 
Next osld 
End Sub 

Function CheckIsPic(oShp As Shape) As Boolean 
If oShp.Type = msoPicture Then CheckIsPic = True 
If oShp.Type = msoPlaceholder Then 
    If oShp.PlaceholderFormat.ContainedType = msoPicture Then CheckIsPic = True 
End If 
End Function 

Sub CenterOnSlide(oShp As Shape) 
    Dim sngSlideWidth As Single 
    Dim sngSlideHeight As Single 

    sngSlideWidth = ActivePresentation.PageSetup.SlideWidth 
    sngSlideHeight = ActivePresentation.PageSetup.SlideHeight 

    oShp.Left = sngSlideWidth/2 - oShp.Width/2 
    oShp.Top = sngSlideHeight/2 - oShp.Height/2 


End Sub 
+0

Привет, Стив, этот код работал, но у меня есть потенциальное осложнение. Хотя этот код эффективно и точно позволяет мне центрировать изображение на слайде, я склонялся к команде 'With' (операция?), Потому что мне захочется добавить код в будущем для других изменений форматирования и на основе моего googling it _seems_ (поскольку я новичок), команда 'With' - это путь. Я смотрю на ваш опыт. Большое спасибо!!! – ChrisG

+0

Вы можете легко изменить процедуру CenterOnSlide для использования с oShp и добавить больше форматирования в форму, чем просто ее центрирование; или полностью изменить имя, чтобы отразить то, что вы хотите сделать с формой. FormatShape или что угодно. Использование With/End With, а не повторное использование oShp.ThisProperty, oShp.ThatProperty будет немного быстрее. В этом случае быстрее, но не так, вы заметите какую-либо разницу, но это не может повредить, и это экономит печатание. –

0
For Each osld In ActivePresentation.Slides 
If osld.SlideIndex > 1 Then Exit Sub 'I don't know if I need this line 

'Если оставить эту строку в ваш код будет касаться только первый слайд презентации. «Если это то, чего ты хочешь, отлично. В противном случае удалите его и соответствующий End If ниже.

For Each oshp In osld.Shapes 
    If CheckIsPic(oshp) = True Then 'Making sure that we're only working with images 

'С ActiveWindow.Selection.ShapeRange 'Часть кода мне нужна помощь с ' Вместо: С oshp

.Align (msoAlignCenters), msoTrue 
    End With 
    End If 
Next oshp 
Next osld 
End Sub 
+0

Привет Стив, Спасибо, что нашли время, чтобы ответить на мой вопрос. Я обновил код с вашим предложением, и была возвращена следующая ошибка: «Метод или элемент данных не найден», и он указывает на «.Align» – ChrisG

+0

Как я изменил код ссылки, очень возможно, что это источник моей ошибки: ' Для каждого osld В ActivePresentation.Slides Если osld.SlideIndex> 1 Then Exit Sub Для каждого oshp В osld.Shapes Если CheckIsPic (oshp) = True Then С osld.oshp .align (msoAlignCenters), msoTrue End With End If Следующий oshp Следующий osld End Sub' – ChrisG

Смежные вопросы