首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在VBA动态范围内消除循环引用?

如何在VBA动态范围内消除循环引用?
EN

Stack Overflow用户
提问于 2018-06-25 06:18:27
回答 1查看 583关注 0票数 1

我正在尝试创建一个用户定义的Excel函数,该函数在某种程度上计算公式所在单元格上方的所有非空单元格(从技术上讲,该单元格来自定义区域中第一个单元格的特定单元格)。我遇到的问题是,向下复制公式会导致循环引用。我不想让其他用户遇到这个问题。如何避免循环引用?

我一直在尝试用以下方法解决这个问题:

代码语言:javascript
复制
Set CellOne = Range(“A10”)
Set CellTwo = Range(Selection.Address).Offset(-1, 0)
Set MyRange = Application.Range(Cell1:=CellOne.Address, Cell2:=CellTwo.Address)
CountNonBlanks = Application.WorksheetFunction.CountA(MyRange)

此代码还会在向下复制时导致循环引用:

代码语言:javascript
复制
Set CellTwo = Range(ActiveCell.Address).Offset(-1, 0)

该问题似乎是由于引用相对于哪个单元格被选中或激活而引起的。我只希望MyRange在公式所在的单元格上方结束一个单元格,而不管哪个单元格是活动的或被选中的。

FWIW,用户定义公式的最终目的是返回字母表中的下一个字母,而不管公式放置在前一个字母下面多少行。这个原生函数可以工作,但我希望有一个更优雅的解决方案:

代码语言:javascript
复制
=MID("abcdefghijklmnopqrstuvwxyz",COUNTA(A$10:A10)+1,1)

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-25 06:30:43

您不应该在工作表的udf中使用Selection或Activecell,因为它们是不断变化的。将range引用传递到udf中,或使用application.caller将包含该udf的单元格引用为range对象。

如果您发布了整个udf或至少是声明,我可以编辑此响应以提供更具体的帮助。下面是一个例子。

代码语言:javascript
复制
Public Function nextLetter()

    'since no reference is passed in, you might want to make this volatile
    Application.Volatile

    With Application.Caller.Parent
        nextLetter = Chr(97 + Application.CountA(.Range(.Cells(10, "A"), _
                                         .Cells(Application.Caller.Row - 1, "A"))))
    End With

End Function

传入的起始单元格的替代。

代码语言:javascript
复制
Public Function nextLetter2(startRng As Range)

    'since only a single cell reference is passed in, you might want to make this volatile
    Application.Volatile

    With Application.Caller.Parent
        nextLetter2 = Chr(97 + Application.CountA(.Range(startRng, _
                                         .Cells(Application.Caller.Row-1, startRng.Column))))
    End With

End Function

=nextLetter2(A$10)一样使用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51014429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档