#用户自定义函数中的值错误

我写了一个VBA函数来检查几件事情,并返回一个触发条件格式的代码。 一切运作良好,除了公式经常触发#value错误。 它对包含公式的所有单元格(几千)都这样做。 每当我打开另一个工作簿时出现错误。 有时候我不打开另一个工作簿。

function在这里:

  Function jjcheck(STDTRow As Integer, cuCOL As Integer, cuMax As Integer, trmEnd As Integer, trmEMax As Integer, worksheetSRC As String, lstCTCT As Date) As Variant 'use in spreadsheet =jjcheck(B2,Variables!$G$4,Variables!$G$2,Variables!$F$2,"SRM",U2) '=jjcheck(B2,Variables!$G$4,Variables!$F$4,Variables!$G$2,Variables!$F$2,"SRM",IF(ISBLANK(U2),TODAY(),U2)) Dim V() As String, dayMax As Integer, lookup As Date, theDiff As Integer, lstContact As String V = Split(ActiveWorkbook.ActiveSheet.Cells(1, 2).Value, "-"): dayMax = V(1): theDiff = 256 lookup = lstCTCT theDiff = DateDiff("d", lookup, Date): lstContact = "" If theDiff > dayMax Then lstContact = "Alert" Dim STDcu As Integer, STtrmEnd As Date, daysTOtrmend As Integer STDcu = ActiveWorkbook.Worksheets(worksheetSRC).Cells(STDTRow, cuCOL).Value STtrmEnd = ActiveWorkbook.Worksheets(worksheetSRC).Cells(STDTRow, trmEnd).Value daysTOtrmend = DateDiff("d", Date, STtrmEnd) If STDcu < cuMax And daysTOtrmend < trmEMax Then jjcheck = "CHECK" & lstContact ElseIf daysTOtrmend < trmEMax / 2 Then jjcheck = "ETerm" & lstContact Else jjcheck = "" & lstContact End If End Function 

怀疑这个错误可能是由于时间单元格U2是空的,我改变了我把lstCTCT放到IF(ISBLANK(U2),TODAY(),U2)这似乎没有帮助。 图像显示了工作表中发生的事情感谢您对此的任何洞察力。

让我知道这是否有所作为? 主要变化是从ActiveWorkbookThisWorkbook 。 (其他一些只是为了整理)

 Function jjcheck(STDTRow As Integer, cuCOL As Integer, cuMax As Integer, trmEnd As Integer, trmEMax As Integer, worksheetSRC As String, lstCTCT As Date) as Variant 'use in spreadsheet =jjcheck(B2,Variables!$G$4,Variables!$G$2,Variables!$F$2,"SRM",U2) '=jjcheck(B2,Variables!$G$4,Variables!$F$4,Variables!$G$2,Variables!$F$2,"SRM",IF(ISBLANK(U2),TODAY(),U2)) Dim V() As String, lstContact As String Dim dayMax As Integer, theDiff As Integer, STDcu As Integer, daysTOtrmend As Integer Dim lookup As Date, STtrmEnd As Date STDcu = ThisWorkbook.Worksheets(worksheetSRC).Cells(STDTRow, cuCOL).Value STtrmEnd = ThisWorkbook.Worksheets(worksheetSRC).Cells(STDTRow, trmEnd).Value daysTOtrmend = DateDiff("d", Date, STtrmEnd) V = Split(ThisWorkbook.ActiveSheet.Cells(1, 2).Value, "-"): dayMax = V(1): theDiff = 256 lookup = lstCTCT theDiff = DateDiff("d", lookup, Date): lstContact = vbNulltring If theDiff > dayMax Then lstContact = "Alert" If STDcu < cuMax And daysTOtrmend < trmEMax Then jjcheck = "CHECK" & lstContact ElseIf daysTOtrmend < trmEMax / 2 Then jjcheck = "ETerm" & lstContact Else jjcheck = vbNullString & lstContact End If End Function