如何修复VBA类型不匹配运行时错误'13'?
解决VBA代码运行时错误(报错行:point1 = Array(X1, Y1))
核心错误原因
Array()函数返回的是Variant类型数组,无法直接赋值给你声明的Double类型数组,这是导致运行时错误的直接原因。
修复方案
方案1:修改数组声明类型
将point1、point2、point3等数组的声明改为Variant类型,直接接收Array()的返回值:
Dim point1 As Variant Dim point2 As Variant Dim point3 As Variant
方案2:手动初始化Double数组并赋值
如果必须使用Double类型数组,需要先通过ReDim指定数组长度,再逐个赋值:
Dim point1() As Double ReDim point1(1) ' 数组索引从0开始,2个元素对应X1、Y1 point1(0) = X1 point1(1) = Y1
其他需修复的潜在问题
- 未声明变量:
Slo1、Slo2未声明,需添加声明语句:Dim Slo1 As Double, Slo2 As Double - 多余的Transpose操作:
FinalX、FinalY是单个Double值,不需要用Application.Transpose,直接赋值即可:Range("G3").Value = FinalX Range("G4").Value = FinalY - 自定义函数依赖:确保
Slope、Midpoint、Center这三个自定义函数已正确定义,且返回值类型与代码中的调用逻辑匹配(比如返回数组类型)。
修复后的完整代码示例
Sub Circles() Dim X1 As Double, Y1 As Double Dim X2 As Double, Y2 As Double Dim X3 As Double, Y3 As Double X1 = Range("C3").Value Y1 = Range("D3").Value X2 = Range("C4").Value Y2 = Range("D4").Value X3 = Range("C5").Value Y3 = Range("D5").Value ' 修改为Variant类型数组 Dim point1 As Variant Dim point2 As Variant Dim point3 As Variant point1 = Array(X1, Y1) point2 = Array(X2, Y2) point3 = Array(X3, Y3) ' 补充变量声明 Dim Slo1 As Double, Slo2 As Double Slo1 = Slope(point1, point2) Slo2 = Slope(point2, point3) Dim Mid1 As Variant Mid1 = Midpoint(point1, point2) Dim Mid2 As Variant Mid2 = Midpoint(point2, point3) Dim line1 As Variant line1 = Array(Mid1(0), Mid1(1), Slo1) Dim line2 As Variant line2 = Array(Mid2(0), Mid2(1), Slo2) Dim Final As Variant Final = Center(line1, line2) Dim FinalX As Double, FinalY As Double FinalX = Final(0) FinalY = Final(1) ' 移除多余的Transpose Range("G3").Value = FinalX Range("G4").Value = FinalY End Sub
内容的提问来源于stack exchange,提问作者John Thompson
相关产品推荐
相关产品推荐

