我有两个版本的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数据将自动显示。这个自定义功能在开始时运作良好。
在我使用此函数填写我需要的所有数据后,我写了另一个Sub试图将所有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()函数中循环,“结束函数”在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