我正在使用Excel 2007.我在Excel VBA模块中具有以下功能:
Function test(Loc, Dis)
Dim StaRan As String
Dim EndRan As String
Application.Volatile
' Build the Start Range and End Range strings
StaRan = Loc.Offset(-Dis, 0).Address
EndRan = Loc.Offset(Dis, 0).Address
' Feed the range strings to Excel's Average function to get the answer
test = WorksheetFunction.Average(Range(StaRan & ":" & EndRan))
End Function
当插入Excel工作表时,test
函数使用距离Dis
作为正/负行数来偏移位置Loc
以构建可用于的范围计算平均值。工作表设置为手动计算,以便在按下F9按钮之前不会更新。
在Sheet1中输入以下内容:
在单元格A2:1
在小区A3:1
在A4单元格:1
在单元格B3:= test(A3,1)
如果您在查看F9时正在查看放置函数的工作表(Sheet1),则此函数可以正常工作(返回1)。查看任何其他工作表(例如,Sheet2)时,按F9按钮重新计算。然后返回到原始工作表(Sheet1)并查看test
返回的内容。它返回#VALUE!
。如果在查看原始工作表(Sheet1)时再次按F9,则会返回正确的答案。
这是一个Excel错误吗?有办法解决这个问题吗?
答案 0 :(得分:2)
Range()
指的是活动表,除非您符合条件。
这更直接:
Function test(Loc, Dis)
Application.Volatile
test = WorksheetFunction.Average(Loc.Offset(-Dis,0).Resize((2*Dis)+1))
End Function