Excel VBA 中有关使用 UBound + CurrentRegion 提示类型不匹配的问题及解决方案

先来说一下解决方案:使用 CurrentRegion.Value 即可。

--------

今天需要在 Excel 里放一个小程序,于是在网上边搜 VBA 边写程序。

其中一步要获取“单元格所在列的最后一行的行数”,网上给了很多方法,其中一个是用求上限函数:Ubound(数组位置)

按照文章的方法,我可以写:

rowMax = UBound(Worksheets(1).Range("b2").CurrentRegion, 1)

但是运行的时候系统提示:

Excel VBA 中有关使用 UBound + CurrentRegion 提示类型不匹配的问题及解决方案

类型不匹配?

于是我想调一下监视窗口,结果点了半天屏幕没反应……后来才发现是在窗口的最下面的那一小条,拉起来……(感觉好傻哈哈)

经过查询发现,如果只写到“CurrentRegion”,那么类型是variant/object/range,但是如果后面再写上".value"的话,类型则是variant/variant(1 to 40, 1 to 4),就解决了。仔细查了一下函数里的内容,发现竟然没有 value 属性,但是有 value2,而且在后面写“.value2”也是可以的。Hmm, interesting...

我用的版本是买电脑送的Office 2019 家庭学生版

Excel VBA 中有关使用 UBound + CurrentRegion 提示类型不匹配的问题及解决方案