在单元格中输入的 msoShapeOval 不允许是声明为 MsoShapeType 的变量的值



在附加的代码中,除了将值分配给shpOval3之外,一切正常。

我正在尝试从单元格中获取文本并将其分配给声明为 MsoShapeType 的变量。

1( 当代码尝试将 msoShapeOval 的单元格值分配给 shpOval3(声明为 MsoShapeType(时,代码因类型不匹配而失火。

2(如果我在.Shapes.AddShape(strOval4, Left, Top, Width, Height)中尝试strOval4(字符串(,它也会失火并说类型不匹配。

我试图避免在单元格中转换为 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

可以使用 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

希望这有帮助!

最新更新