每次切换时,基于动态范围的公式结果都会发生变化 sheet Excel VBA

Dynamic range based formula results' change every time I switch sheet Excel VBA

我编写了一个函数,该函数应该获取特定列的特定部分,然后通过将列的每个条目与留给它的单元格的值进行比较,计算特定条件出现的次数遇见了。 一切正常,除了一个问题..如果我在 "Sheet1" 上使用函数,得到一个结果,然后切换到 "Sheet2" 并在 sheet 上使用函数,它会改变结果"Sheet1" 出于某种原因。

Function countStable(rangeObj As Range) 'rangeObj that being passed is a namedRange(Synamic Range)
    Application.Volatile
    ActiveSheet.Select
    Dim entry, preEntryVal, entryVal As Variant
    Dim counters(1 To 5, 1 To 1) As Integer

    Dim cStable, cIncreased, cDecreased, cAdded, cLost

    cStable = 0
    cIncreased = 0
    cDecreased = 0
    cAdded = 0
    cLost = 0

    Set rangeObj = Intersect(rangeObj, rangeObj.Parent.UsedRange)

    For Each entry In rangeObj
    If Not IsEmpty(entry.Value) And Not IsEmpty(ActiveSheet.Range("A" & entry.Row)) Then
        entryVal = entry.Value
        preEntryVal = ActiveSheet.Cells(entry.Row, entry.Column - 1).Value

        If entryVal = preEntryVal Then
            cStable = cStable + 1
        ElseIf InStr(entryVal, "-") And Not (InStr(preEntryVal, "-")) Then
            cLost = cLost + 1
        ElseIf Not InStr(entryVal, "-") And InStr(preEntryVal, "-") Then
            cAdded = cAdded + 1
        ElseIf preEntryVal < entryVal Then
            cDecreased = cDecreased + 1
        ElseIf preEntryVal > entryVal Then
             cIncreased = cIncreased + 1
        End If

    End If

    counters(1, 1) = cStable
    counters(2, 1) = cIncreased
    counters(3, 1) = cDecreased
    counters(4, 1) = cAdded
    counters(5, 1) = cLost

    Next
    countStable = counters

End Function

如代码中所述,作为参数传递的 rangeObj 是在名称管理器中定义的,它基于 Offset 公式。 我知道它会因为动态范围而改变两个 sheet 上的值,但不确定为什么……我不想改变它。

请帮忙?

在几个地方,代码引用了 ActiveSheet。无论函数出现在何处,它都会反映任何 sheet 处于活动状态的值。您需要改用提供的范围对象的父对象。

Dim currentSheet as Worksheet
Set currentSheet = rangeObj.Parent

然后,在方法中搜索ActiveSheet并替换为currentSheet。