2016-09-07 145 views
1

这是一个单独的问题,与我之前提交的一个问题有一些帮助。Object with Combobox with With语句

我试图使用一些检查表单上的数字ID字段(记录集源自复杂联接的查询)的代码,并将其与一个值的组合框进行比较,即未绑定到窗体但源自它从查询中填入组合框,并根据表单上的数字ID进行填充。 对于组合框的查询有两列绑定“名称”和“ID”,隐藏ID字段。

尝试运行代码时,我总是收到“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 

再次同样的错误

最后我试图显式声明组合框上的t他形成它源自:

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 

任何和所有的观察窗口和调试打印都跟我说环路看到值在组合框中,甚至被赋予在这条线的正确选择:

.Value = .ItemData(i) 

但继续出错误

哦,它在抱怨线路:

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

当通过步进它是否检查了该行中每个项目的所有值?例如; “我”保持正确的行号吗? “.Value”值是否正确? 'ParID'是一样的吗? – David

+0

它不会一步一步地继续在错误行上挂起,但是'i'确实保存了正确的行号,'.Value'确实包含了正确的值,'ParID'的确包含了正确的数字ID 。 – mattlore

回答

0

好吧,我会被诅咒!我发现了这个问题。

我不知道这是否是一个语法问题,或者逻辑的问题,但我删除了.value来自:

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

因此,这里是新的,完全工作代码:

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)不会返回一个对象,而是一个Variant。所以'.Value'确实是错的。 – Andre