У меня есть две фигуры, выбранные в VBA для PowerPoint 2010, как я могу создать какую-то структуру данных из них - PullRequest
0 голосов
/ 29 января 2012

Я пытаюсь создать игру на память, подобную той, что здесь: http://www.mathsisfun.com/games/memory/index.html. Я подхожу к этому так:

Пользователь выбирает две фигуры, а затем запускает макрос с именем associateShapes (), В associateShapes я использую модуль класса с именем ShapeAssociation, в нем у меня есть два свойства shape1Name и shape2Name, где пара представляет связь между этими формами этих имен.

Поэтому, когда я пытаюсь протестировать ShapeAssociation, я использую этот модуль:

Global shapeAssociations() As ShapeAssociation
Global shapeAssoc As New ShapeAssociation
    Public Sub Test()
        ReDim shapeAssociations(0)
        shapeAssoc.shape1Name = ActiveWindow.Selection.ShapeRange(1).Name
        shapeAssoc.shape2Name = ActiveWindow.Selection.ShapeRange(2).Name

        Set shapeAssociations(0) = shapeAssoc
        MsgBox shapeAssociations(0).shape1Name
    End Sub

Однако окно сообщения, которое я в итоге вижу, пусто, возможно, указывает на то, что переменная shapeAssoc не была инициализирована. Я попробовал несколько других подходов для создания структуры данных пар фигур в VBA, от многомерного массива форм до этого подхода. Все эти попытки приносят свои собственные сообщения об ошибках, будь то сообщения времени компиляции или сообщения времени выполнения. Поэтому мой вопрос к вам: как мне создать структуру данных в VBA, которая представляет пару Shapes?

1 Ответ

1 голос
/ 29 января 2012

Поскольку мы не можем видеть, что происходит в модуле вашего класса, я переписал его, чтобы вместо него использовать массив UDT.Это работает так:

Public Type ShapeAssociation
    shape1Name As String
    shape2Name As String
End Type

Dim shapeAssociations() As ShapeAssociation

Public Sub Test()

    ReDim shapeAssociations(0)

    With shapeAssociations(0)
        .shape1Name = ActiveWindow.Selection.ShapeRange(1).Name
        .shape2Name = ActiveWindow.Selection.ShapeRange(2).Name
    End With

    MsgBox shapeAssociations(0).shape1Name & vbCrLf & shapeAssociations(0).shape2Name

End Sub

Вы хотите убедиться, что пользователь фактически выбрал по крайней мере две фигуры (Selection.ShapeRange.Count) и только две фигуры.

Кроме того, планируете ли вы, чтобы пользователь играл в игру в обычном режиме или в режиме слайд-шоу?Если последнее, ничего из этого не будет работать;Вы не можете ничего выбирать в режиме слайд-шоу.

...