Excel自定义函数自行执行无限循环;“结束函数”;工作方式类似于;“下一步”;或;“循环”;

Excel自定义函数自行执行无限循环;“结束函数”;工作方式类似于;“下一步”;或;“循环”;,excel,vba,function,infinite-loop,udf,Excel,Vba,Function,Infinite Loop,Udf,我有两个版本的Excel工作簿。它们的结构基本相同。出于某种原因,我需要将一些单元格从版本A复制到版本B,因此我编写了一个名为GetVal()的自定义函数,代码如下: Function GetVal(cur As Range) Dim CurSheet As String, RowN As Integer, ColN As Integer RowN = cur.Row ColN = cur.Column CurSheet = cur.Parent.Name GetVal = Workbooks(

我有两个版本的Excel工作簿。它们的结构基本相同。出于某种原因,我需要将一些单元格从版本A复制到版本B,因此我编写了一个名为GetVal()的自定义函数,代码如下:

Function GetVal(cur As Range)
Dim CurSheet As String, RowN As Integer, ColN As Integer
RowN = cur.Row
ColN = cur.Column
CurSheet = cur.Parent.Name
GetVal = Workbooks("BIG Inventory Data - 2015  P10W1.xlsx").Worksheets(CurSheet).Cells(RowN, ColN).Value
End Function
然后我在单元格A1中键入“=GetVal(A1)”,来自另一个工作簿的A1数据将自动显示。这个自定义函数在开始时运行得非常好

在我使用这个函数填充我需要的所有数据之后,我编写了另一个子函数,试图将所有getval()公式转换为纯值。以下是简化的测试代码:

'First I Set the test Range to this GetVal function
Sheets("vba").Range("A1").Formula = "=GetVal(Partner_HLJ!D3)"
'Then I convert it into pure value
Sheets("vba").Range("A1") = Sheets("vba").Range("A1").Value
但它停留在第一步。它进入无限循环。当我使用F8一步一步走的时候,我发现它总是在GetVal()函数中循环,“End函数”就像For循环中的“Next”……我感到非常困惑

顺便说一下,原始的转换子代码如下

Sub Convert_GetVal_Formula_To_Value_Only()
Dim i As Integer, cl As Range
For Each cl Range("A1:E3715")
If cl.Formula Like "=GetVal*" Then
cl = cl.value
End If
Next cl
End Sub

在转换为纯值之前,您是否尝试过
Application.Calculation=xlCalculationManual
?它是真的循环,还是从另一个单元格再次调用用户定义函数(UDF)?您似乎是从大量单元格(即18757个单元格)调用UDF。UDF被调用了很多次,所以你会认为它在循环。@A.S.H它已经在简化测试代码中循环了。在你的OP中,你说过当应用于单个单元格(A1)时没有问题。什么是简化的测试代码?@A.S.H它只是我用来测试UDF的代码。在转换为纯值之前,您是否尝试过
Application.Calculation=xlCalculationManual
?它是真的循环,还是从另一个单元格再次调用用户定义函数(UDF)?您似乎是从大量单元格(即18757个单元格)调用UDF。UDF被调用了很多次,所以你会认为它在循环。@A.S.H它已经在简化测试代码中循环了。在你的OP中,你说过当应用于单个单元格(A1)时没有问题。什么是简化的测试代码?@A.S.H它只是我用来测试UDF的代码。