VBA类型不兼容问题:Variant/String与Variant数组如何转换?
VBA解决ListObject列单行/多行数据赋值数组的类型不匹配问题
当ListObject的Funktion列有多行数据时,.DataBodyRange.Value返回二维Variant数组;仅单行数据时,返回的是单个Variant/String值。你声明data()为数组类型,直接赋值单个值会触发错误13(类型不匹配)。
以下是两种实用解决方案:
方案一:先判断行数再赋值
通过判断数据区域的行数,将单行数据手动包装成和多行结构一致的二维数组:
Dim data As Variant Dim targetColRange As Range ' 获取目标列的数据区域 Set targetColRange = wsData.ListObjects("EvalDevPerson").ListColumns("Funktion").DataBodyRange ' 先判断区域是否存在(避免无数据时报错) If Not targetColRange Is Nothing Then If targetColRange.Rows.Count = 1 Then ' 单行数据:初始化1行1列的二维数组,赋值单个值 ReDim data(1 To 1, 1 To 1) data(1, 1) = targetColRange.Value Else ' 多行数据:直接赋值数组 data = targetColRange.Value End If End If
方案二:先赋值再判断是否为数组
利用Variant类型的兼容性,先赋值后检查是否为数组,非数组则转为数组:
Dim data As Variant Dim targetColRange As Range Set targetColRange = wsData.ListObjects("EvalDevPerson").ListColumns("Funktion").DataBodyRange If Not targetColRange Is Nothing Then data = targetColRange.Value ' 若返回的不是数组,包装成二维数组 If Not IsArray(data) Then Dim tempArr As Variant ReDim tempArr(1 To 1, 1 To 1) tempArr(1, 1) = data data = tempArr End If End If
说明
两种方案最终都会让data统一为二维Variant数组,后续处理逻辑无需区分单行/多行情况,彻底避免类型不匹配错误。
内容的提问来源于stack exchange,提问作者Matthias Pospiech
相关产品推荐
相关产品推荐

