intersecWith()方法的一个重要bug
intersecWith 方法是一个非常有用的方法,VBA手册中的给出的示例代码如下在使用过程中我发现下面的代码不能够正确运行。具体说 If VarType(intPoints)vbEmpty Then这种判断方式有问题。按照手册的说法,如果有交点返回交点坐标,如果没有交点则不返回任何值,根据我的实际测试,即使是没有交点,返回的也是一个double()变量!!此时vartype() typename()的值分别是 8197 和 double()(vba语言参考中没有关于此值的说明,与此值相近的是 常数vbArry值8192代表数组) 而此时的 ubound(变量) 的值返回的是-1!!
也就是说如果你想使用示例代码中的方法测试对象是否有交点不能的到正确的方法 应为无论是否有交点vartype(交点) 的值 都不等于 vbEmpty0 !!
我的测试环境是 2005 简体中文版 office2003OSwindows XP sp2
不知道我遇到的问题是否带有普遍性 或者说我上述的现象是否正确,请各位朋友验证一下。
' Find the intersection points between the line and the circle
Dim intPoints As Variant
intPoints = lineObj.IntersectWith(circleObj, acExtendNone)
' Print all the intersection points
Dim I As Integer, j As Integer, k As Integer
Dim str As String
If VarType(intPoints)vbEmpty Then
For I = LBound(intPoints) To UBound(intPoints)
str = "Intersection Point[" & k & "] is: " & intPoints(j) & "," & intPoints(j + 1) & "," & intPoints(j + 2)
MsgBox str, , "IntersectWith 示例"
str = ""
I = I + 2
j = j + 3
k = k + 1
Next
End If
我上面贴的代码是 手册中的代码示例,我使用的时候 是比较两个线段是否相交,结果无论是 平行线还是 非平行线 vartype(交点 as variant)返回的都不是vbEmpty
我也遇到这个BUG。
闷了很久 MSGBOX了半天
最后只好把If VarType(intPoints)vbEmpty then
改成 If ubound(intPoints)-1 then
才行 。 巨闷ing。
haha终于遇到知音了 我也是 msgbox 半天 后来的用的方法和你的一样啊 还有多余点问题呢,明明4个交点,它确返回5个或更多个交点.所以使用IntersectWith()一定要谨慎噢!
页:
[1]