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

#value error in user defined function

我写了一个 VBA 函数来检查一些东西和 returns 一个代码 触发条件格式。除了 该公式经常触发 #value 错误。它为所有人做这件事 包含公式的单元格(几千个)。错误出现 每当我打开另一个工作簿时。当我不这样做时,它有时会发生 打开另一个工作簿。

函数在这里:

  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,Variables!$G,Variables!$F,"SRM",U2)
   '=jjcheck(B2,Variables!$G,Variables!$F,Variables!$G,Variables!$F,"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) 这似乎没有帮助。The image shows what happens in the worksheet 感谢您提供任何见解。

让我知道这是否有任何不同?主要变化来自 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,Variables!$G,Variables!$F,"SRM",U2)
'=jjcheck(B2,Variables!$G,Variables!$F,Variables!$G,Variables!$F,"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