2009-11-11 53 views
1

我一直在努力,爲什麼下面的代碼,通過循環第三次我得到一個錯誤類型時行「對於lCount = 0至MAXCOUNT」正在13不匹配,找出評估。我原本以爲這個問題是從vArray獲得價值,但測試顯示它是由「For」行觸發的。我不知道在循環處理過程中類型將如何改變。謝謝!VB6類型不匹配在循環條件

Public Function FindCodeIndex(vArray As Variant, MatchValue As String) As Integer 
    ''This function locates a value in a combo box returning the index or -1 if not found 
    Dim lCount As Long 
    Dim maxCount As Long 
    Dim arrayStr As String 


    On Error GoTo ErrorHandler 

    maxCount = UBound(vArray) 


    For lCount = 0 To maxCount 
    arrayStr = vArray(1, lCount) 

     If UCase$(arrayStr) = UCase$(MatchValue) Then 
      FindCodeIndex = Int(lCount) 
      Exit Function 
     End If 
    Next lCount 

    FindCodeIndex = -1 

    Exit Function 


ErrorHandler: 

MsgBox "Unexpected error in frmComment::FindCodeIndex()" & vbCrLf & _ 
      "Error Code: " & CStr(Err.Number) & " Error Desc: " & Err.Description 
+1

您不會將'arrayStr'賦值給任何值。你確定這不是問題嗎? – Dan 2009-11-11 23:09:55

+0

添加了任務(從內存,不在工作PC現在)到arrayStr。測試顯示循環在第三遍的For語句失敗。 – Timbuck 2009-11-12 01:22:16

+0

蒂姆,你可以用當地人的窗口看到,在第三道次所用的陣列中的數據,並編輯您的問題,包括這個信息。 – 2009-11-14 06:32:28

回答

1
Public Function FindCodeIndex(Array() As String, ByVal MatchValue As String) As Long 

    Dim index As Long 
    Dim upper_bound As Long 

    upper_bound= UBound(Array) 
    MatchValue = UCase(MatchValue) 

    For index = 0 To upper_bound 
     If UCase(Array(index)) = MatchValue Then 
      FindCodeIndex = index 
      Exit Function 
     End If 
    Next index 

    FindCodeIndex = -1 

End Function 
+0

VB絕對不喜歡那個解決方案,抱怨Array()沒有被定義。 最近的測試表明,設置一個長= -1也拋出一個錯誤(?) – Timbuck 2009-11-13 00:50:00

+0

@Timbuck。 'Array'不是VB6中的有效標識符,因爲它與內置的'Array'函數衝突。 – 2009-11-19 03:39:56

+0

沒錯,這就是爲什麼我不能確定爲什麼ChaosPandion這裏把這個代碼,除非我失去了一些東西。 – Timbuck 2009-11-21 03:12:20

0

的功能提到的代碼被用於一個組合框寫入(你實際複製每個項目在list()方法到一個數組,發送給你的功能?)。如果你使用標準的VB組合框,這看起來有點過於複雜。只需使用以下代碼:

Private Declare Function SendMessage Lib "User32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal uMsg As Long, ByRef wParam As Any, ByRef lParam As Any) As Long 

Private Const CB_FINDSTRINGEXACT As Long = &H158 

Public Function FindCodeIndex(ByRef cmb As ComboBox, ByRef sMatchValue As String) As Long 
'This function locates a value in a combo box returning the index or -1 if not found 

    FindCodeIndex = SendMessage(cmb.hWnd, CB_FINDSTRINGEXACT, ByVal -1, ByVal sMatchValue 

End Function 

在這種情況下使用Windows API的速度會更快,更小。

+0

這稍差評論我的一部分 - 也涉及到其他開發人員製作大約十年前一個錯誤的決定。實際上,我所擁有的是一個有兩行的數組,第一個是代碼描述列表,第二個是關聯的代碼列表。上面的函數看起來通過陣列的匹配代碼值,並且將組合框LISTINDEX =到陣列的項目被發現的位置。組合框顯示代碼說明。 – Timbuck 2009-11-21 03:10:48