VBA数组赋值与Rs循环计算时类型不匹配问题求解
VBA数组类型不匹配问题解决:遍历单元格区域计算Rs数组
你的核心问题是statikk_start数组混合了单个数值和单元格区域对象,循环到索引2、3、4时,直接用区域对象参与算术运算会触发类型不匹配错误。以下是直接可行的修正方案:
修正代码
Dim p As Range Set p = Sheets("Kjøreplan").Range("B4:K27") Dim statikk_start As Variant statikk_start = Array(6, 10, 12, 12, 12, 6, 6, 10) ' 修正区域范围的笔误(原H4:E27是反向区域,改为H4:H27匹配其他列格式) statikk_start(2) = Sheets("Kjøreplan").Range("E4:E27") statikk_start(3) = Sheets("Kjøreplan").Range("H4:H27") statikk_start(4) = Sheets("Kjøreplan").Range("I4:I27") ' Rs数组每个元素可存储单个值或数组(对应区域的批量计算结果) Dim Rs(1 To 7) As Variant Dim colIndex As Integer Dim cell As Range For colIndex = 1 To 7 Dim startVal As Variant startVal = statikk_start(colIndex - 1) ' 判断当前元素是单个值还是单元格区域 If TypeName(startVal) = "Range" Then ' 初始化临时数组存储该列的所有计算结果 Dim tempRs() As Variant ReDim tempRs(1 To startVal.Cells.Count) Dim i As Integer i = 1 ' 遍历区域内每个单元格计算 For Each cell In startVal tempRs(i) = 2 * p_max(1, colIndex) / cell.Value i = i + 1 Next cell Rs(colIndex) = tempRs Else ' 单个数值直接计算 Rs(colIndex) = 2 * p_max(1, colIndex) / startVal End If Next colIndex
关键说明
- 类型判断:用
TypeName(startVal)区分单个数值和Range对象,避免类型不匹配 - 区域遍历:对Range类型的元素,嵌套循环遍历每个单元格,将计算结果存入临时数组后赋值给Rs
- 笔误修正:原代码中
H4:E27是反向区域(会自动转为E4:H27),改为H4:H27保证和其他列格式一致(如果实际需求是H列的连续单元格) - Rs结构:Rs数组的元素可以是单个值或数组,对应不同类型的计算结果
内容的提问来源于stack exchange,提问作者jayp
相关产品推荐
相关产品推荐

