Excel VBA:combobox自动更新另一个之前、之后或更改事件?

Excel VBA:combobox自动更新另一个之前、之后或更改事件?,excel,events,combobox,beforeupdate,vba,Excel,Events,Combobox,Beforeupdate,Vba,在我的用户表单上,我有两个组合框:承包商、产品、类别、单位。所有这些都由MS SQL database 2012中的数据填充,然后userform执行存储过程并插入新记录。我想构建一个动态表单,其中组合框会根据上一个组合框的选择自动更新 当从列表中选择承包商时,我希望产品列表缩小范围,并使用SELECT Station仅显示与承包商链接的产品。然后,我想类别和单位填写自动根据产品选择。 当然,例如,当输入新产品时,类别和单位组合框中的完整列表将显示,因此这将需要if语句 我的问题是使用哪个事件?

在我的用户表单上,我有两个组合框:承包商、产品、类别、单位。所有这些都由MS SQL database 2012中的数据填充,然后userform执行存储过程并插入新记录。我想构建一个动态表单,其中组合框会根据上一个组合框的选择自动更新

当从列表中选择承包商时,我希望产品列表缩小范围,并使用SELECT Station仅显示与承包商链接的产品。然后,我想类别和单位填写自动根据产品选择。 当然,例如,当输入新产品时,类别和单位组合框中的完整列表将显示,因此这将需要if语句

我的问题是使用哪个事件?更新或更改事件之前、之后?或者也许有其他的选择可以做到这一点

我读了一些关于这些事件的书,似乎改变事件不是一个好的选择: 避免创建具有相互影响的更改事件的两个或多个控件-例如,两个相互更新的文本框 但我感觉不太好,因为我还没有在活动前/活动后使用。如果到目前为止我所做的任何代码可能是相关的,请让我知道,我会编辑这篇文章


谢谢你的建议。

听起来变化的方向只是一种方式。根据您所描述的,您不会有两个组合框相互更改的问题,因为承包商更改了产品,而产品更改了类别和单位。只要产品的变更事件没有改变承包商,承包商可能会触发其变更事件,导致一连串的变更事件呼叫,你就可以了。产品-类别和产品-单元关系也是如此。

理论上,我可以从产品开始,而不是从承包商开始,因为产品可以从不同的承包商处获得。但我想用一个方向的形式,并以此方式设计组合框。如果我没有呢?我应该使用哪个事件,或者更一般地说,当我希望承包商和产品相互影响时,我应该如何进行?您试图避免的是在事件之间来回反弹,没有尽头。您可以让产品变更更新承包商,只要这样做不会触发承包商的变更事件,该事件具有更新产品变更事件的代码。如果你一定要避免这样,你就没事了。注意:您可以使用Application.EnableEvents=False禁止触发事件。这样做很棘手,因为您需要确保在完成更改时将EnableEvents设置为true,否则从那时起不会触发任何事件。我决定使用更新后的产品事件,因为插入任何字符都会触发更改事件。我可以输入一个新产品,这样可能会导致类别和单位组合框出现错误,因为在本例中,我需要完整的类别列表为新产品选择一个。它在更新后事件中正常工作。