Excel VBA – 第二个SET形状的“types不匹配”

我有一个小的macros,但只有在第二个“设置形状”行上得到types13不匹配(运行时错误13)。 第一个我没有错误,但不知道为什么我在第二个错误。 AFAIK它正在做同样的事情?

Sub myMacro() Dim mapWS, dataWS As Worksheet Dim fromX, fromY, toX, toY As Integer Dim fromShape, toShape As Shape Set mapWS = Sheets("World Map") Set dataWS = Sheets("Data") Dim shapeNames(2, 2) As String shapeNames(0, 0) = "USA" shapeNames(0, 1) = "USA2" shapeNames(1, 0) = "Germany" shapeNames(1, 1) = "DEU" i = 0 Set fromShape = mapWS.Shapes.Range(Array(shapeNames(i, 1))) Set toShape = mapWS.Shapes.Range(Array(shapeNames(i + 1, 1))) ... End Sub 

在第二行时出现错误(“Set toShape = mapWS …”)。 为什么在那里发生 – 或者相反,为什么它不会发生在第一个? 你一次只能设置一个形状范围吗?

感谢您的任何帮助或任何想法!

请注意,使用下面的语法,在VBA中, fromShape Shape的第一个对象是变体,而第二个是Shape

 Dim fromShape, toShape As Shape 

如果你想要两个形状,你必须写: Dim fromShape As Shape, toShape As Shape

所以,在你的第一行:

 Set fromShape = mapWS.Shapes.Range(Array(shapeNames(i, 1))) 

您将Range对象的结果影响到一个变体。 没关系。

但在你的第二行:

 Set toShape = mapWS.Shapes.Range(Array(shapeNames(i + 1, 1))) 

您将一个Range对象的结果影响到一个Shape对象,然后“types不匹配”。

你宁愿让VBA决定,然后将这两个variables声明为Variant:

 Dim fromShape, toShape 

感谢罗里评论,如果你想要真正的typesvariables,你将不得不使用:

 Dim fromShape As ShapeRange, toShape As ShapeRange 

既然你实际上需要Shape对象,那么IMO会更好地使用它们:

 Dim fromShape As Shape, toShape As Shape ... i = 0 Set fromShape = mapWS.Shapes(shapeNames(i, 1)) Set toShape = mapWS.Shapes(shapeNames(i + 1, 1))