我正在为库存文员创建一个用户表单,该用户表单实际上是为了进行审计而盘点库存。当前过程在纸上-我想将其放在平板电脑上。
目标:
1)表单上出现单行,其中包含项目位置,产品,数量和描述2)如果数量正确,则用户单击“正确”,然后出现下一项3)如果数量不正确,则用户键入观察到的数量,该数量将被写入相应数据表的J列4)如果用户要检查/返工,则滚动选项可以前进和后退
Private Sub CommandButton1_Click()
'GET DATA FROM TABLE
ListBox1.ColumnCount = 4
ListBox1.RowSource = "A2:D500"
End Sub
'IF QTY IS CORRECT, NEXT ROW
Private Sub CommandButton_QtyCorrect_Click()
Call SpinButton1_SpinUp
End Sub
'IF QTY DOESN'T MATCH, USER KEYS CORRECT
Private Sub CommandButton2_Click()
Range("K1") = TextBox2_Qty.Value
TextBox2_Qty.Value = ""
End Sub
Private Sub ListBox1_Click()
'DISPLAY DATA TABLE
End Sub
Private Sub SpinButton1_SpinDown()
If ListBox1.ListIndex > 0 Then
ListBox1.Selected(ListBox1.ListIndex - 1) = True
End If
End Sub
Private Sub SpinButton1_SpinUp()
If ListBox1.ListIndex + 1 < ListBox1.ListCount Then
ListBox1.Selected(ListBox1.ListIndex + 1) = True
End If
End Sub
Private Sub TextBox2_Qty_Change()
'USER OVERWRITE
End Sub
问题:
1)在当前设置下,所有行都填充列表框。如何一次显示一行?
2)当前行显示在列表框上时,如果不匹配,如何写入J列中的相应行?
以下代码将是我的ansatz:
Private UserForm1_Activate()
ListBox1.ColumnCount = 4
ListBox1.RowSource = "A2:D2" ' show only first row
SpinButton1.Min = 2
SpinButton1.Max = Range("A1048576").end(xlUp).row ' last row as maximum value of spin button
End Sub
Private Sub CommandButton_QtyCorrect_Click()
If SpinButton1.Value < SpinButton1.Max Then _
SpinButton1.Value = SpinButton1.Value + 1
End Sub
Private Sub CommandButton2_Click()
Range("K1") = TextBox2_Qty.Value
TextBox2_Qty.Value = ""
End Sub
Private Sub SpinButton1_Change()
ListBox1.RowSource = "A" & SpinButton1.Value & ":D" & SpinButton1.Value
End Sub
因此,您可以将旋转按钮的值用作列表框的行索引。一次仅显示一行,它可能会暂时帮助您。但是仍有很大的优化潜力...