Excel VBA中Trend函数结合运算时出现“Type mismatch”错误的问题咨询
Excel VBA中Trend函数结合运算时出现“Type mismatch”错误的问题咨询
嗨,我来帮你捋捋这个问题的原因和解决办法!
你遇到的「Type mismatch(类型不匹配)」错误,核心原因是VBA里的Application.Trend返回的是一个数组——哪怕你看起来它只应该返回单个数值,它依然会以数组的形式输出。而你直接把这个数组和数字1做加法运算,VBA就会因为类型不兼容报错啦。
至于为什么用辅助单元格就没问题?那是因为当你把Application.Trend的结果赋值给单元格时,Excel会自动解析数组里的单个值并写入单元格,之后你再引用单元格的Value,拿到的就是纯数值,自然能正常运算。不过不用辅助单元格也完全能解决,给你两个简单的方案:
方案1:直接提取数组的单个元素
既然Application.Trend返回的是数组,我们只要用索引取出数组里的第一个(也是唯一一个)值就行,VBA数组默认是基于1的索引,代码修改成这样:
Sub Test() With ThisWorkbook.Worksheets("Output") Dim ys As Range, xs As Range, x As Range Set ys = .Range("P6:P7") ' 注意这里要加.,不然会引用当前活动工作表,不是Output表 Set xs = .Range("S6:S7") Set x = .Range("T6") .Range("P" & 8) = Application.Trend(ys, xs, x, True)(1) + 1 End With End Sub
(另外小提醒:你的原代码里Set ys= Range("Output!P6:P7")最好改成.Range("P6:P7"),因为你在With ThisWorkbook.Worksheets("Output")块里,加个.能确保引用的是当前With块里的工作表,避免活动工作表切换导致的错误)
方案2:改用WorksheetFunction.Trend
和Application.Trend不同,WorksheetFunction.Trend在结果为单个值时,会直接返回数值类型,而不是数组,这样就能直接和数字运算了,代码修改如下:
Sub Test() With ThisWorkbook.Worksheets("Output") Dim ys As Range, xs As Range, x As Range Set ys = .Range("P6:P7") Set xs = .Range("S6:S7") Set x = .Range("T6") .Range("P" & 8) = WorksheetFunction.Trend(ys, xs, x, True) + 1 End With End Sub
这两种方案都能帮你省去辅助单元格,直接完成运算~
备注:内容来源于stack exchange,提问作者mathi
相关产品推荐
相关产品推荐

