Excel自定义函数本身无限循环,“End Function”的工作方式如“Next”或“Loop”

我有两个版本的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单元格中input“= GetVal(A1)”,另一个工作簿的A1数据就会自动显示出来。 这个自定义函数在一开始就工作得很好。

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

 '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()函数中,“结束函数”在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