VBA 用户窗体列表框和数据 Table 写入

VBA UserForm ListBox and Data Table Writing

我正在为库存文员创建一个用户窗体,该文员为审计目的对库存进行物理盘点。目前的流程是纸上谈兵 - 我想把它写在 tablet.

目标:

1) 单行出现在表格上,包含项目位置、产品、数量和描述 2) 如果数量正确,用户点击 "correct" 并出现下一个项目 3)如果数量不正确,用户键入观察到的数量写入相应数据的J列table 4) 如果用户想要 check/re-work 一个项目

,则可以向前和向后滚动选项

    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)当当前行显示在ListBox上时,不匹配时如何写入J列对应行?

答案

1) 由下面的 Ralf S 解决。

2)解法:

Private Sub AdjustButton_Click()

'IF QTY DOESN'T MATCH, USER KEYS CORRECT

Range("J" & SpinButton1.Value) = TextBox2_Qty.Value

TextBox2_Qty.Value = ""

End Sub

以下代码将是我的答案:

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

因此,您可以使用微调按钮的值作为列表框的行索引。 这一次只显示一行,现在可能对您有所帮助。但仍有很大的优化潜力...