VBA UserForm列表框和数据表编写

问题描述 投票:0回答:1

我正在为库存文员创建一个用户表单,该用户表单实际上是为了进行审计而盘点库存。当前过程在纸上-我想将其放在平板电脑上。

目标:

1)表单上出现单行,其中包含项目位置,产品,数量和描述2)如果数量正确,则用户单击“正确”,然后出现下一项3)如果数量不正确,则用户键入观察到的数量,该数量将被写入相应数据表的J列4)如果用户要检查/返工,则滚动选项可以前进和后退

Data TableCurrent Form

    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列中的相应行?

vba datatable listbox userform
1个回答
0
投票

以下代码将是我的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

因此,您可以将旋转按钮的值用作列表框的行索引。一次仅显示一行,它可能会暂时帮助您。但是仍有很大的优化潜力...

© www.soinside.com 2019 - 2024. All rights reserved.