Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 子窗体组合框行源更新-如何更新下拉列表_Ms Access_Vba_Combobox - Fatal编程技术网

Ms access 子窗体组合框行源更新-如何更新下拉列表

Ms access 子窗体组合框行源更新-如何更新下拉列表,ms-access,vba,combobox,Ms Access,Vba,Combobox,我在MS Access窗体上有一个treeview控件。子窗体组合框控件的值列表取决于在主窗体的树视图中选择的节点。 我正在尝试刷新子窗体上的组合框下拉列表内容,如下所示: Public Sub TreeView1_nodeClick(ByVal node As Object) subForm.Controls("Bid").RowSource = "... newquery depending on tree node values ..." subForm.Controls(

我在MS Access窗体上有一个treeview控件。子窗体组合框控件的值列表取决于在主窗体的树视图中选择的节点。 我正在尝试刷新子窗体上的组合框下拉列表内容,如下所示:

Public Sub TreeView1_nodeClick(ByVal node As Object)
    subForm.Controls("Bid").RowSource = "... newquery depending on tree node values ..."
    subForm.Controls("Bid").Requery
End Sub
Private Function customFuncName(fld As Control, id As Variant, row As Variant, col As Variant, code As Variant) As Variant
    Dim rs As Recordset
    Set rs = CurrentDb.OpenRecordset(... new query ...)

    Select Case code
        Case acLBInitialize
            customFuncName = True
        Case acLBOpen
            customFuncName = 1
        Case acLBGetRowCount
            customFuncName = rs.RecordCount
        Case acLBGetColumnWidth
            customFuncName = -1
        Case acLBGetValue            
            customFuncName = rs.GetRows(rs.RecordCount)(col, row)
    End Select

End Function
但奇怪的是,这并没有更新值列表。 第二次单击同一节点会将列表更新为预期值;再次单击另一个节点时,列表错误,它包含与下一个到最后一个分配的行源相关的列表,而不是与最后一个分配的行源相关的列表

激活组合框“rowsource”是否有延迟?
这个令人讨厌的问题的解决方案是什么?

好吧,我自己找到了一个解决方案-我不是特别喜欢它*,但它确实有效,所以我将它视为临时解决方案,直到其他人使用royal route设置rowsource提供解决方案并以某种方式使其达到预期效果

我检查了msdn站点,发现也可以为组合框列表填充使用自定义函数。简单的一点是,Access必须使用该函数:只需在组合框的row Source Type属性中输入函数名,只需输入普通函数名,前后不带任何=即可。 现在,对于不太容易的部分,MS需要函数的特定格式和特定内容。我的情况如下:

Public Sub TreeView1_nodeClick(ByVal node As Object)
    subForm.Controls("Bid").RowSource = "... newquery depending on tree node values ..."
    subForm.Controls("Bid").Requery
End Sub
Private Function customFuncName(fld As Control, id As Variant, row As Variant, col As Variant, code As Variant) As Variant
    Dim rs As Recordset
    Set rs = CurrentDb.OpenRecordset(... new query ...)

    Select Case code
        Case acLBInitialize
            customFuncName = True
        Case acLBOpen
            customFuncName = 1
        Case acLBGetRowCount
            customFuncName = rs.RecordCount
        Case acLBGetColumnWidth
            customFuncName = -1
        Case acLBGetValue            
            customFuncName = rs.GetRows(rs.RecordCount)(col, row)
    End Select

End Function
请参阅和上面的链接

*由于明显的记录集开销导致性能下降,但由于我显示的列表最多有40行,所以对我来说效果很好