Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
如何启用Excel vba组合框自动更新_Vba_Excel_Combobox - Fatal编程技术网

如何启用Excel vba组合框自动更新

如何启用Excel vba组合框自动更新,vba,excel,combobox,Vba,Excel,Combobox,我正在创建一个用户表单,用于处理学校项目的库存 我创建了一个组合框来删除选定的项目,但我不知道删除某个项目后如何更新列表。我使用以下代码执行删除和刷新功能 Private Sub cmdDelete_Click() Dim row As Long row = cbPCodeIM.ListIndex + 2 Sheets("Inventory").Select Sheets("Inventory".Range("A" & row & ":E" &a

我正在创建一个用户表单,用于处理学校项目的库存

我创建了一个组合框来删除选定的项目,但我不知道删除某个项目后如何更新列表。我使用以下代码执行删除和刷新功能

Private Sub cmdDelete_Click()
    Dim row As Long
    row = cbPCodeIM.ListIndex + 2

    Sheets("Inventory").Select
    Sheets("Inventory".Range("A" & row & ":E" & row).Select
    Selection.Delete shift:=x1Up
    'the following line does not seem to work when uncommented
    'cbPCodeIM.ListFillRange = "=Inventory!$A$1:index(Inventory!$A:$A;CountA(Inventory!$A:$A))"
    MsgBox "Item has been removed.", vbOKOnly
End Sub

在我看来,最好创建一个单独的方法来填充
组合框
,然后可以从
初始化
事件调用该方法,也可以在需要更新
组合框时调用该方法

userform
后面的代码如下所示,代码用于捕获
cmdDelete-Click()
事件、
userform\u Initialize()
事件,最后是自定义方法

如果有任何问题,请告诉我

Private Sub cmdDelete_Click()
    Dim nRow As Long

    nRow = Me.cbPCodeIM.ListIndex + 2
    Worksheets("Inventory").Rows(nRow).Delete 'NOTE, this will delete the entire row

    Fill_My_Combo Me.cbPCodeIM

End Sub

Private Sub UserForm_Initialize()
    Fill_My_Combo Me.cbPCodeIM
End Sub


Private Sub Fill_My_Combo(cbo As ComboBox)
    Dim wsInventory As Worksheet
    Dim nLastRow As Long
    Dim i as Long

    Set wsInventory = Worksheets("Inventory")
    nLastRow = wsInventory.Cells(Rows.Count, 1).End(xlUp).Row ' Finds last row in Column 1

    cbo.clear
    For i = 2 To nLastRow 'start at row 2, assuming a header
        cbo.AddItem wsInventory.Cells(i, 1)
    Next i
End Sub

这段代码是错误的,因为它在重新填充组合框之前没有清除它的列表,所以它只会将项目添加到现有列表中。另外,
Unload Me
将关闭用户表单。这可能不应该出现在“删除”按钮中code@tigeravatar:有效积分。在重新填充组合框之前,我编辑了我的帖子以清除组合框。我还删除了
Unload Me
代码片段,在测试过程中,我将其集中在那里。谢谢你的警惕!更好,但仍然无法编译。需要从
Me.cbo.clear
中删除
Me
,因为您将combobox作为对象变量传递,因此在调用它时无需使用
Me
。作为旁注,我还建议使用
Dim I作为Long
,以便声明循环计数器变量。这部分并不是绝对必要的,只是良好的实践。再次编辑@tigeravatar。谢谢好了,现在所有的虫子都出来了+1对于毅力,如果你的解决方案不在这里,我会提供基本相同的解决方案:)