msoShapeOval, введенный в ячейку, не может быть значением для переменной, объявленной как MsoShapeType - PullRequest
0 голосов
/ 03 февраля 2020

В прикрепленном коде все работает, кроме присвоения значения shpOval3.

Я пытаюсь взять текст из ячейки и присвоить его переменной, объявленной как MsoShapeType.

1) Код пропускается с несоответствием типов, когда он пытается присвоить значение ячейки msoShapeOval для shpOval3 (объявлен как MsoShapeType).

2) Если я пытаюсь вместо strOval4 (строка) вместо .Shapes.AddShape(strOval4, Left, Top, Width, Height), он также пропускает и говорит тип mismatch.

Я пытаюсь избежать преобразования в ячейку константы msoShapeType, поскольку значение ячейки загружается в комбинированный список в форме, а значение 9 не имеет смысла для пользователей. Я могу конвертировать в случае необходимости, но ищу решение без конвертации.

Sub ShpType()

Dim shpOval1 As Long
Dim shpOval2 As MsoShapeType
Dim shpOval3 As MsoShapeType
Dim strOval4 As String

Sheets("Data").Range("Company1Shape") = "msoShapeOval"

shpOval1 = msoShapeOval
shpOval2 = msoShapeOval
shpOval3 = Sheets("Data").Range("Company1Shape")
strOval4 = Sheets("Data").Range("Company1Shape")

Debug.Print "shpOval1 = "; shpOval1
Debug.Print "shpOval2 = "; shpOval2
Debug.Print Sheets("Data").Range("Company1Shape")
Debug.Print "shpOval3 = "; shpOval3
Debug.Print "strOval4 = "; strOval4

End Sub
Debugger results with shpOval3 commented out
shpOval1 =  9 
shpOval2 =  9 
msoShapeOval
shpOval3 =  0 
strOval4 = msoShapeOval

1 Ответ

0 голосов
/ 03 февраля 2020

Вы можете использовать оператор Select Case, чтобы проверить вашу строку и назначить соответствующую константу переменной, объявленной как msoAutoShapeType ...

Dim strShapeType As String
strShapeType = Sheets("Data").Range("Company1Shape")

Dim shapeType As MsoAutoShapeType
Select Case strShapeType
    Case "msoShapeOval"
        shapeType = msoShapeOval
    Case "msoShapeRectangle"
        shapeType = msoShapeRectangle
    'etc
    '
    '
    '
End Select

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...