1
 Dim lastcomp As String
        Dim qty As Integer
        Dim rs As New ADODB.Recordset
        rs.Open "select Prem1Item,Prem1Qty from [TU FAR Before VB] order by Prem1Item", accCon
        Do While Not rs.EOF
            If Not IsNull(rs(0).Value) Then
                If rs(0).Value <> "n/a" Then
                    If rs(0).Value <> "" Then
                        premlist.AddItem rs(0).Value & Format(rs(1).Value, "00")
                    End If
                End If
            End If
            rs.MoveNext
        Loop
        rs.Close
        Dim i As Integer
        Dim j As Integer
        i = 1

        For i = 1 To premlist.ListCount
            For j = 1 To finallist.ListCount
                    **If Not finallist(j) = premlist(i) Or finallist(j) = "" Then**
                        finallist.AddItem premlist(i)
                    End If
            Next j
        Next i
        AccessConnection ("Close")

    End If

レコードを取得して Prem1Item のすべてのアイテムをプルし、圧縮してから重複を表示しないようにし、Prem1Qty から金額を取得して、見つかった各アイテムの合計を表示しようとしています。それらをこれらのリストボックスに入れてから、2つの列(プレミアムと合計)を持つテーブルにエクスポートしようとしていました

エラー 13 タイプの不一致が表示され、太字で入力した領域が強調表示されます (「If Not Finalist(j) = premlist(i) Or finalist(j) = "" Then」)。私の計画は、そのリストにデータを入力してから、テーブルに入力してレポートを生成することでした。

4

2 に答える 2

2

リスト ボックス オブジェクトでは、配列、VBA コレクション、レコードセット コレクションなどの場合のように、インデックス値を使用して行の値を取得することはできませんFields

もっといい言い方があるのか​​もしれませんが、私にはわかりません。ただし、次のような試みは、その「タイプの不一致」エラーをスローします...

Debug.Print Me.finallist(1)
Debug.Print TypeName(Me.finallist(1))

リスト ボックスの各行からバインドされた列の値を取得する場合は、ItemDataプロパティを使用します。

Dim i As Long
For i = 0 To (Me.finallist.ListCount - 1)
    Debug.Print Me.finallist.ItemData(i)
Next
Debug.Print "done"
于 2013-08-21T23:57:41.063 に答える
0

たとえば、比較に .value を追加してみてください。

finallist(j).value = premlist(i).value
于 2013-08-21T18:03:29.023 に答える