VBA Powerpoint Grouping Array?
Я хочу создать код, который изменит размер выбранного изображения, разместит его соответствующим образом, создаст 2 текстовых поля под ним и, наконец, сгруппирует изображение и 2 текстовых поля вместе.
Моя общая цель - сделать 2 дополнительных макроса, которые будут выполнять ту же функцию, но располагать их посередине и справа.
Я не могу понять, как сгруппировать 3 фигуры.
Вот мой код ниже.
Dim LeftPic As ShapeRange, sld As Slide, ByeBox As Shape, HelloBox As Shape
Set LeftPic = ActiveWindow.Selection.ShapeRange
Set sld = Application.ActiveWindow.View.Slide
With LeftPic
.Left = 0.17 * 72 '72 is the multiplier for the inch
.Top = 1.83 * 72
.Height = 4.27 * 72
.Width = 3.2 * 72
End With
LeftPic.Name = "LeftPic"
Set HelloBox = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, _
0.17 * 72, Top:=6.17 * 72, Width:=200, Height:=50)
HelloBox.TextFrame.TextRange.Text = "Hello"
HelloBox.Name = "HelloBox"
Set ByeBox = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, _
0.17 * 72, Top:=6.42 * 72, Width:=200, Height:=50)
ByeBox.TextFrame.TextRange.Text = "Goodbye"
ByeBox.Name = "ByeBox"
Shapes.Range(Array("HelloBox", "ByeBox", "LeftPic")).Group
2 ответа
Решение
Dim LeftPic As ShapeRange, sld As Slide, ByeBox As Shape, HelloBox As Shape
Set LeftPic = ActiveWindow.Selection.ShapeRange
Set sld = Application.ActiveWindow.View.Slide
With LeftPic
.Left = 0.17 * 72 '72 is the multiplier for the inch
.Top = 1.83 * 72
.Height = 4.27 * 72
.Width = 3.2 * 72
End With
LeftPic.Name = "LeftPic"
Set HelloBox = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, _
0.17 * 72, Top:=6.17 * 72, Width:=200, Height:=50)
HelloBox.TextFrame.TextRange.Text = "Hello"
HelloBox.Name = "HelloBox"
Set ByeBox = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, _
0.17 * 72, Top:=6.42 * 72, Width:=200, Height:=50)
ByeBox.TextFrame.TextRange.Text = "Goodbye"
ByeBox.Name = "ByeBox"
sld.Shapes("HelloBox").Select
sld.Shapes("ByeBox").Select msoFalse
sld.Shapes("LeftPic").Select msoFalse
ActiveWindow.Selection.ShapeRange.Group
Мне нравится подход ZebraOnWheels для этой проблемы, но в целом вам просто нужно немного помочь с синтаксисом для Array (это немного невероятно). Пример:
Dim oSl As Slide
Dim TempArray() As Variant
Dim oGroup As Shape
Set oSl = ActivePresentation.Slides(1)
With oSl
TempArray = Array(.Shapes("Bob").Name, _
.Shapes("Carol").Name, _
.Shapes("Ted").Name, _
.Shapes("Alice").Name)
Set oGroup = .Shapes.Range(TempArray).Group
End With
Видишь, что там происходит? Вы должны передать Array свойство.Name для ссылок на фигуры, а не только на имена фигур.