Excel VBA函数仅在查看时返回答案

时间:2014-02-23 00:56:25

标签: excel vba excel-vba

我正在使用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错误吗?有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

Range()指的是活动表,除非您符合条件。

这更直接:

Function test(Loc, Dis)

    Application.Volatile
    test = WorksheetFunction.Average(Loc.Offset(-Dis,0).Resize((2*Dis)+1))

End Function