快速搜索并辅助输入所需的数据

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

这是在EH中看到的一个贴子《求高手作一个数据输入窗口》,其要求为:

这个表是用来输入公司的采购数据的,为了输入的规范,便于把采购单价用公式导入计算销售的表格中,所以必须采用输菜编码的方式录入,但是菜编码太多,很难记住,特别是对于新员工,所以设计了简码,想实现动画图片那样的功能,请高手帮忙!!!
1、如果记得住菜号,在菜号单元格中输入菜号,在输的过程中能逐步提示,如附图动画。
2、如果记不住菜号,就在菜号单元格中输入简码,输入简码过程中能逐步提示,简码会有重复的菜名,按上下箭头能进行选择,输完回车后,显示的还是菜号,而不是简码,如附图动画。
3、如果能做成一个类似EXCEL中的记录单(如图:输单界面)的形式更好。

初步做了一下,实现的效果如下:
“采购录入信息”工作表:选择列A中的任意单元格或者双击列A中的任意单元格将弹出下图所示的输入对话框。
quickenterinfo1
在上方的文本框中输入菜号或者简码后,下方的列表框将自动搜索匹配的数据。
单击下方列表框中的数据后,相关数据将自动输入到“采购录入信息”工作表的列A和列B中,同时其它列的信息自动填充。
主要的程序代码如下:

Option Explicit
Dim varData, lOldLen
 
Private Sub UserForm_Initialize()
    Dim lLast As Long
    Dim rng As Range
 
    lLast = wksCP.Range("A" & Cells.Rows.Count).End(xlUp).Row
    varData = wksCP.Range("A2:C" & lLast)
 
    With Me.lbxInfo
        .BoundColumn = 1
        .ColumnCount = 3
        .List = varData
    End With
End Sub
 
Private Sub txtFind_Change()
    Dim i As Long
    Dim strFind As String
 
    strFind = "*" & UCase(Me.txtFind.Text) & "*"
 
    With Me.lbxInfo
        If Len(Me.txtFind.Text) < lOldLen Then
            .List = varData
        End If
        lOldLen = Len(Me.txtFind.Text)
        For i = .ListCount - 1 To 0 Step -1
            If (Not UCase(.List(i, 0)) Like strFind) And (Not UCase(.List(i, 2)) Like strFind) Then
                .RemoveItem i
            End If
        Next i
    End With
End Sub
 
Private Sub lbxInfo_Click()
    Dim lListIndex As Long
    lListIndex = Me.lbxInfo.ListIndex
    ActiveCell.Value = Me.lbxInfo.List(lListIndex, 0)
    ActiveCell.Offset(0, 1).Value = Me.lbxInfo.List(lListIndex, 2)
    Unload frmEnterInfo
End Sub
 
Private Sub btnClose_Click()
    Unload frmEnterInfo
End Sub

示例下载:

操作演示:

相关文章

发表评论