Excel VBA Vlookup运行时错误1004

时间:2014-01-07 12:33:09

标签: excel vba excel-vba runtime-error

我正在尝试创建一个运行循环的函数,该循环测试组织(var'org')是否有一个实际上已经开始的广告系列,因此'If(结果< =现在( )'。我在电子表格中找到了一个未指定数量的广告系列,其中包含'CountIf',并将该模块作为'total'提供给该模块。

在电子表格中,当需要有效广告系列的单元格发现其他单元格中随机猜到的广告系列无效时,会转到VBA函数,同时为该功能提供组织ID和广告系列总数在该组织下。

我的代码:

Sub Macro()
    Dim x
    x = MacIDGen(111, 11)
End Sub

Function MacIDGen(org, total)

    Dim iteration As Boolean, result As Range

    For current = 1 To total
        result = Application.WorksheetFunction.VLookup(org & " " & current, ActiveWorkbook.Sheets("Donations").Range("C:E"), 3, False)
        If (result <= Now()) Then
            MacIDGen = org & " " & current & " Test successful"
            current = total
        End If
    Next current

End Function

电子表格结构:

Org ID- Org Camp Count- Camp No.- Valid Camp No.
62      1               1         62 1
14      2               1         14 1
2       4               4         2 4
79      5               4         79 4

在VBA编辑器中进行调试期间runtime error 1004出现,当在电子表格中执行时,函数似乎什么都不做,并且在相当快速刷新单元格之前,单元格采用最后一个有效值。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

所以对于那些可能在以后遇到这种情况的人来说,这是我的工作代码:

Function MacIDGen2(org As Integer, total As Integer)

Dim iteration As Boolean, trueArray() As String, totalTrue As String, randArrNo As Integer, result
ReDim trueArray(total)
totalTrue = 0

For current = 0 To total - 1
    On Error Resume Next
    result = Application.WorksheetFunction.VLookup(org & " " & current + 1, ActiveWorkbook.Sheets("Campains").Range("C:E"), 3, False)
    On Error GoTo 0
    If (Not IsNull(result)) Then
        If (result <= Now()) Then
            trueArray(totalTrue) = current + 1
            totalTrue = totalTrue + 1
        End If
    End If

Next current

If (totalTrue > 0) Then
    randArrNo = WorksheetFunction.RandBetween(0, totalTrue - 1)
    MacIDGen2 = org & " " & trueArray(randArrNo)
Else
    MacIDGen2 = 0
End If

End Function

基本上'On Error Resume Next'解决了这个问题。然后我添加了If IsNull检查结果。

我还略微改进了代码,因为它现在随机选择任何一个有效的广告系列。之前只需选择它找到的第一个有效广告系列。

那些敏锐的人也可能会注意到我在更新版本中引用的工作表与原始代码中的工作表不同。原始工作表是错误的,我正在引用我调用模块的相同工作表,以循环引用结束。这个小小的差异花了我几个小时的头发撕裂混乱。