解决VBA运行时错误13 类型不匹配问题

本文介绍了如何解决VBA运行时错误13,即类型不匹配的问题。通过给单元格参数添加Val()或Int()转换函数来确保兼容性。在排查过程中,发现即使给整数3套上Int()也能避免错误,这引发了一个奇怪的现象:当删除用于显示数据类型的MsgBox代码后,原本的错误居然消失了。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决VBA运行时错误13 类型不匹配问题

先说解决方法:找到出错的语句以后给里面的参数改类型,使其互相兼容。

  • 比如:给单元格Cells()外面套个马甲 Val()
  • 比如:给数字外面套个马甲Int()
    详细的排查过程后面会慢慢讲……这是一个翻转灵异的奇怪问题。

我这边出问题的例子参见杨洋老师的书《深入浅出Excel VBA》第3章,3.2.1节,我原样敲仅VBE里面运行就报错了:

Sub Scores()
	   Dim i
	   For i = 3 To 5
	   		Cells(i, 6) = Cells(i, 3) + Cells(i, 4) + Cells(i, 5)
	   		Cells(i, 7) = Cells(i, 6) / 3 '报错就在这一行
	   Next i
 End Sub

我试了下,解决方案有二:

  1. Val(Cells(i, 6)) 也就是给Cells(i, 6) 穿马甲
  2. 或者, In(3)—— 强调下3不是字符串是整数()

解决归解决,但是要搞清楚之前死在哪里才行,于是我在代码里加了一句显示数据类型的代码

Sub Scores()
      Dim i
      For i = 3 To 5
      		Cells(i, 6) = Cells(i, 3) + Cells(i, 4) + Cells(i, 5)
      		MsgBox MsgBox TypeName(Cells(i, 6))
      		 '让EXCEL给我跳个弹窗看看这单元格里面到底什么数据格式
      		MsgBox MsgBox TypeName(3)
      		'再看看一个数字3还能是什么形式……
      		Cells(i, 7) = Cells(i, 6) / 3 
      Next i
End Sub

果然,Cells(i,6)的数据类型不是正常的变量或者整数,而是range
在这里插入图片描述
而3就是平平无奇的integer
在这里插入图片描述
那么问题来了,Range不能被integer除可以理解,给range套上Val()完全可以理解,variant和一切都搭嘛……但为什么给本来就是integer的3外面套上一层Int()也可以解决问题不再报错呢???

看到这里只是一般奇怪哈,更奇怪的是

当我把两条MsgBox代码删掉,想再看看报错效果

然后,竟然不再报错说什么 运行时错误13了

只能风中凌乱………………

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值