【问题标题】:Error Circular reference VBA from Function来自函数的错误循环引用 VBA
【发布时间】:2017-06-09 19:13:23
【问题描述】:

我正在努力使用我在 VBA 中构建的函数。我尝试在我在函数内部引用的另一张表中使用它,但出现循环引用错误。有人可以帮我吗?这是我第一次用 VBA 写代码,所以请理解错误是否......有趣。

Function Dividend(row As String, col As Date) As Variant
Dim Table As Range
Dim Blgdata() As Variant
Dim v As Integer
Dim h As Integer, var As Date

v = 666
h = 27

Sheets(3).Activate
Set Table = Range(Cells(179, 1), Cells(844, 27))
Debug.Print Table.Address
ReDim Blgdata(1 To v, 1 To h)
Blgdata = Table




Dim i As Integer, j As Integer


 'For i = 1 To 666
  ' For j = 1 To 26
   '      Debug.Print Blgdata(i, j)
    '     If Blgdata(i, j + 1) = 0 Then
     '   Exit For
      '
       '  End If

    'Next j
 'Next i


 For i = 1 To v Step 7
    If Blgdata(i, 1) = row Then
                                  For j = 3 To h

                                  var = Blgdata(i + 1, j)
                                  'Debug.Print var

                                  If (var = col) Then
                                  Dividend = Blgdata(i + 4, j)
                                  Exit For
                                  End If

                                  If j = h Then
                                  Dividend = "-"
                                  Exit For
                                  End If

                                  If Blgdata(i, j + 1) = 0 Then
                                  Exit For
                                  End If

                                  Next j


   End If

 Next i

 End Function

【问题讨论】:

  • 哪一行代码产生了错误?上面的代码是在工作表中还是在模块中(如果是工作表,是哪一个)?
  • 不相关,但签名中的row As String, col As Date 看起来不正确。事实上,这完全令人困惑——未来你会看到那个代码说“WTF?!”从现在起的几个月内。行/列可以合理地预期为引用行/列索引的Long 整数。
  • 您可能想要使用诸如Rubberduck 之类的工具(免责声明:我管理该开源项目)来帮助您进行适当的缩进。

标签: vba function circular-reference


【解决方案1】:

关于编写 vba 函数,我的第一条建议是让你的函数有机会做的不仅仅是你编写它的工作。例如,而不是你的

sheets(3).Activate

您可以使用 Activesheet 或更好的方法,将您想要操作的范围传递给函数。

与你的 v 和 h 变量相同,也许使用

h = inputrange.columns.count()  

函数,以便您可以遍历不同大小的范围。

所有这些都是说我无法真正重现或测试您的循环引用错误,因为它只适用于您的特定工作表,而我没有。

作为一般建议,如果您确实需要循环引用(就像在需要迭代解决方案的问题中那样),您可以选中 enable iterative calculation 复选框,它将允许循环引用。

祝你好运,

埃德加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 2018-02-20
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多