复制表格时出现#VALUE错误

时间:2015-08-06 14:19:59

标签: excel vba user-defined-functions udf

我使用的UDF基本上是一个简化的vlookup。这是代码:

Function SUELDOBASICO(Columna As Integer) As Double

SUELDOBASICO = Application.WorksheetFunction.VLookup(Application.Caller.Parent.Cells(Application.Caller.Row, 3), Application.Caller.Parent.Parent.Sheets("Escalas Salariales").Range("A3:DJ23"), Columna, False)

End Function

我注意到有时在复制工作表(在同一工作簿中)时,出现#VALUE错误。如果我在Excel中“编辑”单元格,只更改任何内容,只需使用F2Enter,错误就会消失。它曾经发生在简单地改变窗口(例如Firefox,然后回到Excel)。这就是我在代码中使用CallerParent这么多的原因。它几乎完全固定,除非有时复印纸张。我似乎无法找到错误的来源。 请帮助。

2 个答案:

答案 0 :(得分:1)

我知道这不是你的确切问题,但是,如果可能的话,我建议完全避免使用VBA,如果这是一个选项,并按如下方式编写公式:

=VLOOKUP(INDIRECT("C"&ROW()),'Escalas Salariales'!$A$3:$DJ$23,XXXXX,false)

XXXXX可以与您当前的Columna变量相同。

这可以保证您的代码可以根据需要运行。

鉴于评论中讨论的内容并尽力确保其有效,我实际上并没有发现您的代码有任何问题,我只是认为它可能与Application.Caller有关。

当我遇到这种情况时,我会尽量使用调试器找出原因 - 这通常涉及Stop语句,以便能够进入代码并查看发生的情况或{{ 1}}消息。

无论哪种方式,我试图打破每个部分,所以,至少你可以看到问题的来源。 为此,我重新处理了你的功能(有一些重大的矫枉过正)....

Debug.Print Err.Description

(另请注意,我已将Function SUELDOBASICO(Columna As Integer) As Double On Error GoTo ErrorCheck Dim CellRef As Range Dim LookupRef As Range Set CellRef = Cells(Application.Caller.Range("A1").Row, 3) Set LookupRef = Application.Caller.Worksheet.Parent.Sheets("Escalas Salariales").Range("A3:DJ23") SUELDOBASICO = Application.VLookup(CellRef, LookupRef, Columna, False) Exit Function ErrorCheck: Stop Resume End Function 更改为Application.WorksheetFunction.VLookup - 请查看this link以获取解释)

一旦你搞清楚了,我会从函数中删除错误代码,因为这对于生产代码来说不是一个好主意 - 只是为了调试。

希望能为您提供所需的答案。

希望有所帮助....

更新#2:

考虑到复制工作表导致此错误的可能性,这里是一个测试,看看该过程是否得到修复:

Application.VLookup

答案 1 :(得分:0)

不需要使用来电者和父母。

Function SUELDOBASICO(Cell as Range, LookupRange as range, Columna As Integer) As Double

' When you call the function :
' set Cell to be  the cell in column C in the same row

' Set LookupRange to Sheets("Escalas Salariales").Range("$A$3:$DJ$23")

SUELDOBASICO =     Application.WorksheetFunction.VLookup(Cell, LookupRange, Columna, False)
End Function

单元格中的公式示例...

= SUEL​​DOBASICO(C10,' Escalas Salariales'!$ 3澳元:$ DJ $ 23)