【发布时间】:2016-03-08 00:28:17
【问题描述】:
我对 VBA 比较陌生,正在努力创建一些表单来帮助进行库存管理。
当表单初始化时,有一个列表框将从库存表中提取产品信息。每行有 11 列,其中包含产品 ID、供应商、价格、库存商品等信息。还有三个复选框 - 低于标准的项目、标准的项目和高于标准的项目。 3 个复选框值设置为 True 开始,因为在初始化表单时所有 Inventory 都显示在列表框中。
我正在尝试编写代码,以便在未选中其中一个复选框时从列表框中删除产品。例如,如果我取消选中“低于面值的商品”,我希望删除所有库存商品数量
我该怎么做呢?我不确定如何引用列表框列中的值。
提前谢谢你!!如果不清楚,请提出问题。
Private Sub UserForm_Initialize()
Dim lr As Long
Dim Inv As Worksheet
Dim rng As Range
Set Inv = Sheets("Inventory")
lr = Inv.Cells(Rows.Count, "A").End(xlUp).Row
Set rng = Inv.Range("A2:K" & lr)
Me.lbInventory.ColumnCount = 11
Me.lbInventory.RowSource = rng.Address
Me.lbInventory.ColumnHeads = True
Me.chkAbove.Value = True
Me.chkBelow.Value = True
Me.chkAt.Value = True
End Sub
Private Sub chkAbove_Change()
ListBuild
End Sub
Private Sub chkAt_Change()
ListBuild
End Sub
Private Sub chkBelow_Change()
ListBuild
End Sub
Sub ListBuild()
Dim Inv As Worksheet
Set Inv = Sheets("Inventory")
Dim r As Integer
Me.lbInventory.Clear
If Me.chkBelow.Value = True Then
For r = 1 To 11
If Inv.Cells(r, 7).Value <
Inv.Cells(r, 9).Value Then
Me.lbInventory.AddItem Inv.Cells(r, 1).Value
End If
Next r
End If
If Me.chkAt.Value = True Then
For r = 1 To 11
If Inv.Cells(r, 7).Value =
Inv.Cells(r, 9).Value Then
Me.lbInventory.AddItem Inv.Cells(r, 1).Value
End If
Next r
End If
If Me.chkAbove.Value = True Then
For r = 1 To 11
If Inv.Cells(r, 7).Value >
Inv.Cells(r, 9).Value Then
Me.lbInventory.AddItem Inv.Cells(r, 1).Value
End If
Next r
End If
End Sub
我收到编译错误。这 3 个语句的预期表达式:
If Inv.Cells(r, 7).Value >,<,=
Inv.Cells(r, 9).Value Then
【问题讨论】:
-
对于每个 if 语句,在运算符后添加一个下划线,告诉它转到下一行。例如
If Inv.Cells(r, 7).Value > _我最初在我的代码中忘记了它,但更新了我的答案 - 见下文。 -
... 或将下一行 (
Inv.Cells(r, 9).Value Then) 向上移动到与操作员相同的行。我只是将它向下移动以使其在我的示例中保持可见。 -
@SincereApathy 哦,当然!感谢您的帮助
标签: excel vba listbox listboxitem listboxitems