单值输入时VB代码出现Ubound类型不匹配错误13求解决
解决VB单个值场景下UBound类型不匹配问题
问题根源
当lastrow = 28时,Range("C28:C" & lastrow)是单个单元格,赋值给Variant变量后得到的是单个值而非二维数组,而UBound仅能用于数组,因此触发错误13(类型不匹配)。
针对性解决方案
方案1:统一将值转为二维数组(推荐,适配后续逻辑)
在赋值后添加数组判断,将单个值强制转为和多值场景一致的二维数组,后续代码无需修改:
material = wsRem.Range("C28:C" & lastrow).Value cantidad = wsRem.Range("M28:M" & lastrow).Value ' 处理单个值转二维数组 If Not IsArray(material) Then material = Array(Array(material)) End If If Not IsArray(cantidad) Then cantidad = Array(Array(cantidad)) End If g = UBound(material, 1) ' 此时无论单/多值都能正常获取行数
方案2:直接通过行号计算行数(更简洁)
既然已经拿到了lastrow,直接计算数据行数,完全规避数组相关问题:
lastrow = wsRem.Cells(Rows.Count, "C").End(xlUp).Row material = wsRem.Range("C28:C" & lastrow).Value cantidad = wsRem.Range("M28:M" & lastrow).Value ' 直接用行号计算行数,无需UBound g = lastrow - 28 + 1
关于你之前IF判断未生效的可能原因
如果之前的判断逻辑仅替换变量而未统一数组结构,后续代码可能仍因数据类型不一致报错。比如仅将单值赋值给普通变量,但后续代码仍按数组逻辑处理,就会出现新的类型问题。上述方案1通过统一二维数组结构,能彻底避免这类问题。
内容的提问来源于stack exchange,提问作者Navvvvx__
相关产品推荐
相关产品推荐

