2014-01-07 278 views
0

我試圖創建一個函數,它將運行一個循環來測試一個組織(var'org')是否有一個實際上已經啓動的活動,因此'If(結果< = Now()'。我在電子表格中找到了數量未指定的廣告系列,並使用'CountIf'並將其作爲「總計」提供給模塊。Excel VBA Vlookup運行時錯誤1004

在電子表格中,當需要的單元格有效的廣告系列發現廣告系列在另一個單元格中隨機猜測出的廣告系列無效,因此會轉到VBA功能,併爲該組織標識以及該廣告系列下的廣告系列總數提供功能。

我的代碼:

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作物並在電子表格中執行時,該功能似乎什麼也不做,細胞很快刷新細胞之前採用最後的有效值。 我該如何解決這個問題?

+0

嘗試將結果的類型從範圍更改爲變體。 VLookup()返回值(字符串,雙精度)或錯誤類型。 – Makah

+0

這已被覆蓋很多次:) –

+0

[這裏](http://stackoverflow.com/questions/20593959/using-vlookup-from-a-vba-module-in-excel-to-check-if-value -is-in-table)就是一個例子... [另一個](http://stackoverflow.com/questions/19057369/vlookup-in-vba-within-a-for-loop)...和[另一個ONE](http://stackoverflow.com/questions/9634611/unable-to-get-the-lookup-property-of-the-worksheetfunction-class)在同一行上... –

回答

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 

基本上,「上的錯誤繼續下一步」固定的問題。然後我添加了If IsNull檢查結果。

我也稍微改進了代碼,因爲它現在隨機選擇任何一個有效的廣告系列。在它只是選擇它找到的第一個有效的廣告系列之前。

那些敏銳的眼睛也許會注意到,我在更新版本中引用的工作表與我原始代碼中的不同。原始表單是錯誤的,我引用了我調用該模塊的同一張表單,以循環引用結尾。這一小小的差異讓我頭痛幾個小時,導致了混亂。