【问题标题】:VBA UserForm ListBox and Data Table WritingVBA UserForm ListBox和数据表编写
【发布时间】:2020-04-09 01:57:28
【问题描述】:

我正在为库存文员创建一个用户表单,该文员出于审计目的对库存进行物理清点。目前的流程在纸上 - 我想把它放在平板电脑上。

目标:

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) 使用当前设置,所有行都填充 ListBox。如何一次显示一行?

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

【问题讨论】:

    标签: vba datatable listbox userform


    【解决方案1】:

    以下代码将是我的答案:

    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
    

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

    【讨论】:

    • 谢谢 - 我现在更了解语法了。使用您的代码,我现在也看到了如何从表单输出。是的 - 这在这一点上是非常基本的。我很想听听您的优化想法。
    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多