VBA自学应用(2)——制作简单的数据录入窗口

现如今有两张表,一张产品表,一张录入表,如图所示。
在这里插入图片描述
在这里插入图片描述
我们要做出如下效果:
在这里插入图片描述
达成这样的效果其实也不难,就让我们一步步来!

一、画一个你的窗体

  1. 首先在标签栏找到开发工具中的VB编辑器并打开

在这里插入图片描述

  1. 然后右键新建一个用户窗体

在这里插入图片描述

  1. 然后选中窗体模块,按F4打开窗体属性窗口(也可以在视图选项卡中打开),这里可以设置窗体的各种属性

在这里插入图片描述

  1. 接下来在视图选项卡下找到工具箱,用工具箱画出所需要的控件

在这里插入图片描述

二、编写窗体代码

  1. 先双击窗体,在如图所示的地方找到UserForm对应的事件(UserForm_Initialize=窗体名称_事件)

在这里插入图片描述
在这里插入图片描述
写入以下代码

Private Sub UserForm_Initialize()
    arr = Sheets("产品表").Range("a1").CurrentRegion
    With ListBox1
    '设置列表框属性
        .List = arr
        .MultiSelect = fmMultiSelectExtended
        .ColumnCount = UBound(arr, 2)
        .ListStyle = fmListStyleOption
        LISTBOX_Post_Flag = 1
        LISTBOX_Mouse_Flag = 1
    End With
End Sub

当然你也可以直接在列表框的属性窗口中设置他的属性

  1. 第二步,按照上述方法找到ListBox1_DblClick,写入以下代码
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    '双击的时候也可以更改数据
    Dim crr()
    Dim m As Long
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            m = m + 1
            ReDim Preserve crr(1 To ListBox1.ColumnCount, 1 To m)
            For j = 0 To ListBox1.ColumnCount - 1
                crr(j + 1, m) = ListBox1.List(i, j)
            Next
        End If
    Next
    If m > 0 Then ActiveCell.Resize(m, j) = Application.Transpose(crr)
End Sub
  1. 第三步,为你需要查找的项目进行模糊匹配设置代码
Private Sub TextBox1_Change()
    '模糊匹配
    Dim drr()
    Dim n As Long
    arr = Sheets("产品表").Range("A1").CurrentRegion
    For i = 1 To UBound(arr)
        If InStr(CStr(arr(i, 1)), TextBox1.Text) > 0 Then
            n = n + 1
            ReDim Preserve drr(1 To ListBox1.ColumnCount, 1 To n)
            For j = 1 To UBound(arr, 2)
                drr(j, n) = arr(i, j)
            Next
        End If
    Next
    If n > 1 Then
        ListBox1.List = Application.Transpose(drr)
    ElseIf n = 1 Then
        ReDim crr(1 To 1, 1 To UBound(drr))
        For i = 1 To UBound(drr)
            crr(1, i) = drr(i, 1)
        Next
        ListBox1.List = crr
    Else
        ListBox1.Clear
    End If
End Sub
  1. 第四步,为关闭和录入按钮编写代码
  • 关闭
Private Sub CommandButton2_Click()
    Unload Me
End Sub
  • 录入
Private Sub CommandButton1_Click()
    '录入
    
    Dim brr(), grr
    Dim k As Long, m As Long
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            k = k + 1
            ReDim Preserve brr(1 To ListBox1.ColumnCount, 1 To k)
            For j = 0 To ListBox1.ColumnCount - 1
                brr(j + 1, k) = ListBox1.List(i, j)
                '选中的数据存入数组brr
            Next
        End If
    Next
    If k = 0 Then MsgBox "请选择数据": Exit Sub
    grr = Application.Transpose(brr)
    If k > 0 Then
        If k = 1 Then
            For i = 1 To UBound(grr)
                
                ActiveCell.Offset(, m) = grr(i)
                m = m + 1
            Next
            ActiveCell.Offset(1).Select
        Else
            For i = 1 To UBound(grr)
                For j = 1 To UBound(grr, 2)
                    ActiveCell.Offset(, m) = grr(i, j)
                    m = m + 1
                Next
                ActiveCell.Offset(1).Select
                m = 0
            Next
        End If
    End If
    '取消选中
    Cells(Rows.Count, "B").End(3).Offset(1).Select
End Sub
  • 这里可以使用小技巧取消窗口自带的关闭按钮事件,找到对应事件键入以下代码就可以啦!
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode <> vbFormCode Then Cancel = True
End Sub

三、使用工作表事件激活窗体

右键双击对应工作表
在这里插入图片描述
按照找窗体事件的方法找到BeforeDoubleClick事件,代码如下

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Range("b5:b100")) Is Nothing Then Exit Sub
    Cancel = True
    UserForm1.Show Model
End Sub

四、补充:关于鼠标在listbox中的滚轮实现

相关代码请移步→列表框实现鼠标滚轮滚动Demo

  • 首先,在上述代码的模块之下,定义一个变量,如图所示
    在这里插入图片描述
  • 第二步,将图示部分改成你定义的变量名称
  • 在这里插入图片描述
    在这里插入图片描述
  • 最后,只需要在对应listbox的mousemove事件下键入如下代码即可以实现滚轮效果
Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    HookListBoxScroll
    Set frmlistbox = Userform1.ListBox1
End Sub
Private Sub ListBox2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    HookListBoxScroll
    Set frmlistbox = Userform1.ListBox2
End Sub
  • 29
    点赞
  • 207
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
VBA(Virtual Basic for Applications)是一种基于微软的Visual Basic语言的宏语言,常用于Office套件中的应用软件中,如Excel、Word等。通过VBA编程,我们可以实现自动化操作和定制化功能。 数据录入系统是一个用于方便、高效地录入数据的系统,通过VBA可以轻松实现这一目标。下面是一个简单VBA编程制作数据录入系统的步骤: 1. 打开Excel软件并创建一个新的工作簿,可以通过快捷键Alt+F11打开VBA编辑器。 2. 在VBA编辑器中,通过插入模块来创建一个新的代码模块。 3. 在代码模块中编写VBA代码,实现数据录入系统的功能。例如,可以编写一个宏,将数据输入到指定的单元格中,或者编写一个表单,使用用户界面来录入数据。 4. 在VBA编辑器中保存你的VBA代码,并返回到Excel中。 5. 在Excel中,你可以通过运行宏的方式来使用你编写的VBA代码。可以将宏与快捷键、按钮等进行关联,以方便使用。 通过VBA编程制作数据录入系统的好处有很多。首先,VBA编程可以使录入数据的过程更加自动化,减少了手动操作的时间和错误。其次,VBA编程可以根据特定的需求,定制化数据录入的界面和功能,使录入数据更加便捷和高效。最后,VBA编程是一种强大的工具,通过它,我们可以深入了解Excel软件的功能和操作,提高我们的编程能力。 总之,通过VBA编程制作数据录入系统是一种非常有效的方法,它可以帮助我们简化数据录入的过程,并提高工作效率。无论是在个人的数据管理中,还是在商务活动中,都可以通过VBA编程制作数据录入系统,从而更好地管理和利用数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

star星梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值