每次切换工作表Excel VBA时,基于动态范围的公式结果都会发生变化
我编写了一个函数,该函数应该获取特定列的特定部分,然后通过将列的每个条目与留给它的单元格的值进行比较,计算满足特定条件的次数。 除了一个问题外,一切正常。。如果我使用Sheet1上的函数,得到一个结果,然后切换到Sheet2并使用此工作表上的函数,它会由于某种原因更改Sheet1上的结果每次切换工作表Excel VBA时,基于动态范围的公式结果都会发生变化,excel,vba,excel-formula,named-ranges,Excel,Vba,Excel Formula,Named Ranges,我编写了一个函数,该函数应该获取特定列的特定部分,然后通过将列的每个条目与留给它的单元格的值进行比较,计算满足特定条件的次数。 除了一个问题外,一切正常。。如果我使用Sheet1上的函数,得到一个结果,然后切换到Sheet2并使用此工作表上的函数,它会由于某种原因更改Sheet1上的结果 Function countStable(rangeObj As Range) 'rangeObj that being passed is a namedRange(Synamic Range) Ap
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是在名称管理器中定义的,它基于偏移量公式。
我知道由于动态范围的原因,它会更改两张图纸上的值,但不确定原因。。我不想改变它
请帮忙?在一些地方,代码引用了活动表。无论函数出现在何处,它都将反映激活的任何工作表的值。您将希望改用提供的范围对象的父对象
Dim currentSheet as Worksheet
Set currentSheet = rangeObj.Parent
然后,在方法中搜索ActiveSheet并将其替换为currentSheet。这确实有效!太神了一个后续问题。。我在哪里能读到这些?我应该找什么?因为我不知道如何提及这个话题……哇,这是一个很难回答的问题。我对Excel的大部分了解都是从多年的使用中学到的,也从这里和那里阅读代码片段中学到的。我记录宏并查看Excel生成的代码,以此作为了解Excel对象模型的起点。我甚至从Microsoft Excel帮助系统本身获得了帮助。不寻常,我知道。这一切都建立在四年的计算机科学学位和多年的行业经验之上。无论如何,搜索Excel对象模型并阅读。玩得高兴我喜欢卓越。