Добавьте пользовательскую форму в файл Power Point.
Поместите CommandButton и ListBox в эту пользовательскую форму.
Поместите следующие коды в UserForm.
Public Sub UserForm_Initialize()
UserForm1.ListBox1.AddItem "msoShapePentagon"
UserForm1.ListBox1.AddItem "msoShapeRectangle"
UserForm1.ListBox1.AddItem "msoShapeSmileyFace"
End Sub
''''''''''''''''''''''''''''''''
Public Sub CommandButton1_Click()
MsgBox UserForm1.ListBox1.Value
UserForm1.Hide
Call Macro2
End Sub
Поместите следующие коды в файл Module1 файла Power Point.
Public Sub Macro1()
UserForm1.Show
End Sub
''''''''''''''''''''''''''''''''
Public Sub Macro2()
ActivePresentation.Slides.Add 1, ppLayoutBlank
Dim myVariant As Variant
myVariant = UserForm1.ListBox1.Value
MsgBox myVariant
'This line is okey
'ActivePresentation.Slides(1).Shapes.AddShape Type:=msoShapeRectangle, Left:=0, Top:=0, Width:=480, Height:=100
'This line gives an error
ActivePresentation.Slides(1).Shapes.AddShape Type:=myVariant, Left:=0, Top:=0, Width:=480, Height:=100
End Sub
Запустите Macro1, затем выберите msoShapeRectangle из ListBox, который является частью UserForm, и нажмите CommandButton.
Это сообщение об ошибке.
Run-time error 13: Type mismatch
Это строка ошибки
ActivePresentation.Slides(1).Shapes.AddShape Type:=myVariant, Left:=0, Top:=0, Width:=480, Height:=100
Итак, как я могу решить эту ошибку?
"msoShapePentagon"
, String
, не то же самое, что msoShapePentagon
, член перечисления с соответствующим значением 51.
Одним из вариантов является функция преобразования представления String
в эквивалент из перечисления:
Private Function ShapeType(s As String) As MsoAutoShapeType
Dim result As MsoAutoShapeType
Select Case s
Case "msoShapePentagon"
result = msoShapePentagon
Case "msoShapeRectangle"
result = msoShapeRectangle
Case "msoShapeSmileyFace"
result = msoShapeSmileyFace
End Select
ShapeType = result
End Function
Обратите внимание, что вам нужно передать этой функции String
, а не Variant
.
Это рекомендуемый подход. Если вам это не нравится, то прочтите эту тему.
Спасибо, мистер БигБен. Я принял свой вопрос решенным до тех пор, пока не будет найдено лучшее решение.
По вашей ссылке имеется более сотни членов перечисления. Я не хочу кодировать сотню членов перечисления.