VBA将单元格区域转数组时遇'Can't assign to array'编译错误求助
解决VBA数组赋值编译错误:Can't assign to array at this point
错误原因
你的buildArrayFromRange函数声明返回类型为String(单个字符串),但实际在函数里试图返回一个字符串数组dynamicArray,类型完全不匹配。调用时把这个错误的返回值赋值给字符串数组变量,就会触发编译错误。
修正步骤及完整代码
- 修改函数返回类型:把函数返回类型从单个字符串改为字符串数组,明确返回值类型。
- 修正数组下标:原代码创建的数组会多一个空元素(循环从0开始计数),调整下标范围避免冗余。
- 声明循环变量类型:给循环变量
cell加上明确类型,避免变体类型的潜在问题。
修正后的函数代码:
Function buildArrayFromRange(inputArray As Variant) As String() Dim dynamicArray() As String ReDim dynamicArray(inputArray.Cells.Count - 1) ' 匹配循环的计数范围 Dim x As Long Dim cell As Range ' 明确cell的类型 For Each cell In inputArray.Cells dynamicArray(x) = cell.Value x = x + 1 Next cell buildArrayFromRange = dynamicArray End Function
调用代码无需修改,保持原样即可:
Dim xDRg1Array() As String xDRg1Array = buildArrayFromRange(xDRg1)
额外优化提示
如果单元格区域可能包含空值或非字符串类型内容,可以用CStr()强制转换为字符串,避免类型错误:
dynamicArray(x) = CStr(cell.Value)
内容的提问来源于stack exchange,提问作者James LCQ
相关产品推荐
相关产品推荐

