使用 VBA 将形状分配给 Powerpoint 中的组

问题描述 投票:0回答:2

如果我有形状名称列表,如何使用 VBA 将它们添加到组中。形状名称列表是动态的,即形状的名称和形状的数量可以在每次运行代码时发生变化。

例如,我有一个形状名称“shape1”、“shape2”、“shape3”、“shape4”的列表。它们位于字符串数组中。我循环遍历数组,将每个形状添加到形状数组中,但无法使 .Group 方法起作用。我尝试过将形状列表作为字符串、形状数组传递给组...但到目前为止还没有运气

    'Using a static example to keep it simple but this list of shapes can change
    strContents = "shape1,shape2,shape3,shape4)"
    strGroupMembers = Split(strContents, ",")
    ReDim shpArray(0 To UBound(strGroupMembers) - 1)
    
    For intCounter = 0 To UBound(strGroupMembers) - 1
        Set shpArray(intCounter) = ActiveWindow.View.Slide.Shapes.Range(strGroupMembers(intCounter))
    Next
    'This line is causing the error
    ActiveWindow.View.Slide.Shapes.Range(shpArray).Group

我尝试将形状列表作为变量中逗号分隔的字符串传递给 group 方法,现在尝试创建形状数组并传递该参数,但总是会得到一个需要对象的错误。

vba powerpoint
2个回答
0
投票

Range
方法接受一个字符串数组。由于您没有声明它,所以它变成了变体数组。

Dim strGroupMembers() As String
strContents = "shape1,shape2,shape3,shape4"
strGroupMembers = Split(strContents, ",")

ActiveWindow.View.Slide.Shapes.Range(strGroupMembers).Group

另一种方式:

shpArray = Array("shape1", "shape2", "shape3", "shape4")
ActiveWindow.View.Slide.Shapes.Range(shpArray).Group

0
投票

现在它可以工作了,我正在尝试给该组命名。我没有立即将其分组,而是将其分配给一个对象变量,并尝试使用分组方法,但不断收到错误:

'ActiveWindow.View.Slide.Shapes.Range(strGroupMembers).Group    
Dim objGroup As Shape    
Set objGroup = ActiveWindow.View.Slide.Shapes.Range(strGroupMembers)    
objGroup.Group '<--- Error - method not found.
objGroup.Name = "Test"
© www.soinside.com 2019 - 2024. All rights reserved.