在附加的代码中,除了将值分配给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
希望这有帮助!