2016-09-07 22 views
1

これは私が提出した以前のものとは別の問題です。Access Combobox with Withステートメントでオブジェクトが必要です

私は、フォームの数値IDフィールドをチェックするコードで作業しようとしています(レコードセットは複雑な結合のクエリから生成されます)。フォームにバインドされていませんが値のコンボボックスと比較しますフォームの数値IDに基づいて、クエリからコンボボックスを入力します。 コンボボックスのクエリには、IDフィールドが非表示の「Name」と「ID」という2つの列がバインドされています。

コードを実行しようとすると "Object Required"エラーが発生しており、デバッグにはすべてを試しました。奇妙なことです:デバッグ中に、コードの各行は必​​要な値を返す/含んでいるため、Accessはコンボボックスを有効なオブジェクトとして見ていますが、引き続きエラーを返します。コードで

最初のショット:

Dim ParID 
Dim i as Integer 
ParID = Me.ParentID.Value 

With Combo217 
    For i = 0 To .ListCount - 1 
     If .Column(1, i).Value = ParID Then 
     .Value = .ItemData(i) 
     Exit For 
     End If 
    Next 
End With 

これは

を動作しませんでしたので、私は変数にコンボボックスを置くと、コンボボックスとして、具体的にそれを宣言してみました:

Private Sub Command223_Click() 
Dim ParID 
Dim Combo As ComboBox 
Set Combo = Combo217 
ParID = Me.ParentID.Value 

With Combo 
    For i = 0 To Combo.ListCount - 1 
     If .Column(1, i).Value = ParID Then 
     .Value = .ItemData(i) 
     Exit For 
     End If 
    Next 
End With 


End Sub 

再度同じエラー

最後に、私はコンボボックスを明示的に宣言しようとしました彼はそれから発信さだと形成:

.Value = .ItemData(i) 

Private Sub Command223_Click() 
Dim ParID 
Dim Combo As ComboBox 
Set Combo = Forms!DT2!Combo217 
ParID = Me.ParentID.Value 

With Combo 
    For i = 0 To Combo.ListCount - 1 
     If .Column(1, i).Value = ParID Then 
     .Value = .ItemData(i) 
     Exit For 
     End If 
    Next 
End With 


End Sub 

任意およびすべてのウィンドウとデバッグプリントを見てループがコンボボックスの値を見ても、このラインで正しい選択を割り当てていることを私に言っておきます

しかし

ああをエラーし続け、それが不満だ線である:

If .Column(1, i).Value = ParID Then 
+0

することによってステッピング:だからここに新しい、完全に動作するコードです

If .Column(1, i).Value = ParID Then 

それは、行の各項目のすべての値をチェックしましたか?例えば; 'i'は正しい行番号を保持していますか? '.Value'値は正しいですか? 'ParID'と同じですか? – David

+0

'i'は正しい行番号を保持し、' .Value 'は正しい値を含み、 'ParID'は実際に割り当てられた正しい数値IDを含みますが、 。 – mattlore

答えて

0

まあ、私は気になるよ!私は問題を発見した。

それは文法問題やロジックの問題でしたが、私は削除した場合、私は知らない.valueから:

Private Sub Command223_Click() 
Dim ParID As Long 
Dim Combo As ComboBox 
Set Combo = Forms![Deal Tracker Query2]!Combo217 
ParID = Me.ParentID.Value 

With Combo 
    For i = 0 To Combo.ListCount - 1 
     If .Column(1, i) = ParID Then 
     .Value = .ItemData(i) 
     Exit For 
     End If 
    Next 
End With 


End Sub 
+1

ええ、[ComboBox.Column](https://msdn.microsoft.com/en-us/library/office/ff192660.aspx)は、オブジェクトではなくバリアントを返します。だから、 '.Value'は間違っています。 – Andre

関連する問題