利用宏和VBA设计产品出入库查询系统:

一、实现入库明细表的内部功能

  1. 创建出入库明细表:

步骤:

  • 新建工作簿“出入库系统.xlsx”

新建表“入库明细”,输入内容并做简单样式设置--设置产品登记或查询区域:选中1-5行—右键—插入。插入的空行用来登记或查询的对应项目如图:利用宏和VBA设计产品出入库查询系统:_第1张图片

  • 新建工作表“出库明细”
  • 将工作簿“出入库系统.xlsx”另存为“出入库系统.xlsm”

2. 利用VBA制作出入库查询表:

  • 在产品出入库明细表中统计出入库次数: 使用counta()
  • 实现产品入库部功能(制作有程序执行按钮的VBA代码):指当设置的添加入库信息的单元格区域A6:F25中输入一条产品入库信息后,系统会将用户输入的入库信息自动地添加到数据表的最后一行,同时也会自动地更新入库次数。
  • 开发工具—VisualBasic(弹出编辑器窗口)—插入—模块(此时就创建了“模块1”,并弹出“产品出入库查询系统.xlsm-模块1(代码)”窗口)—将光标定位在该窗口中-插入—过程(弹出“添加过程”)—名称:入库登记,类型:子程序,范围:公共的—确定--代码如下:

Public Sub 入库登记()

    Dim i As Long       ‘定义变量

    Dim j As Integer

    Dim clo As Integer

    clo = Sheets("入库明细").[A6].CurrentRegion.Columns.Count   ‘统计工作表中数据区域的列数,并赋值给clo

    Sheets("入库明细").Select   ‘选择入库明细工作表

    If Cells(4, 1).Value = "" Then

    MsgBox "请输入入库的入库单号!", vbOKOnly & vbInformation, "信息提示"

    Exit Sub

    End If    ‘ 如果没有输入入库单号,系统将自动弹出信息框并退出过程

    If Cells(4, 2).Value = "" Then

    MsgBox "请输入入库的产品编号号码!", vbOKOnly & vbInformation, "信息提示"

    Exit Sub

    End If

    If Cells(4, 3).Value = "" Then

    MsgBox "请输入产品的名称!", vbOKOnly & vbInformaion, "信息提示"

    Exit Sub

    End If     ‘如果没有输入产品名称,系统将自动弹出信息框并退出过程

    If Cells(4, 4).Value = "" Then

    MsgBox "请输入产品的规格!", vbOKOnly & vbInformation, "信息提示"

    Exit Sub

    End If     ‘如果没有输入规格,系统将自动弹出信息框并退出过程

    If Cells(4, 5).Value = "" Then

    MsgBox ("请输入产品的单位"), vbOKOnly & vbInformation, "信息提示"

    Exit Sub

    End If    ‘如果没有输入单位,系统将自动弹出信息框并退出过程

    If Cells(4, 6) = "" Then

    MsgBox ("请输入产品的类别"), vbOKOnly & vbInformation, "信息提示"

    Exit Sub

    End If    ‘如果没有输入类别,系统将自动弹出信息框并退出过程

    If Cells(4, 7) = "" Then

    MsgBox ("请输入产品的进阶"), vbOKOnly & vbInformation, "信息提示"

    Exit Sub

    End If     ‘如果没有输入进价,系统将自动弹出信息框并退出过程

    If Cells(4, 8) = "" Then

    MsgBox ("请输入产品的数量"), vbOKOnly & vbInformation, "信息提示"

    Exit Sub

    End If    ‘如果没有输入产品的数量,系统将自动弹出信息框并退出过程

    If Cells(4, 9) = "" Then

    MsgBox ("请输入产品的入库日期"), vbOKOnly & vbInformation, "信息提示"

    Exit Sub

    End If     ‘如果没有输入产品的入库日期,系统将自动弹出信息框并退出过程

    i = Val(Sheets("入库明细").Cells(1, 2).Value)  ‘获取已经入库的次数

    For j = 1 To clo

    Cells(i + 8, j).Value = Cells(4, j).Value   ‘进行赋值

    Next j

    Range(Cells(i + 8, 1), Cells(i + 8, clo)).Select  ‘选中添加数据所在单元格区域

End Sub

  • 单击关闭按钮,返回工作表“入库明细”—开发工具—插入—按钮(窗体控件)—画出来(系统会自动弹出“指定宏”对话框)—宏名:选中“入库登记”—确定—将按钮名改为“入库登记”—可右键按钮设置控件格式:字体/字形/字号等—确定—左键单击按钮,即可执行指定的宏代码

3.  实现清空入库信息功能:

也就是入库登记或入库明细查询后需要清空单元格区域内的入库产品信息,再进行下一步工作,设置此功能可以一键清除:

  • 开发工具—VisualBasic—插入—过程(弹出“添加过程”对话框)—名字:清空,类型:子程序,范围:公共的—确定
  • 打开VBA窗口—在工程资源管理器中双击“模块1”,在右侧代码窗口中入库登记功能的程序后面添加下面的“清空”过程的程序代码:

Sub 清空()

Dim k As Integer

Dim L As Integer

L = Sheets("入库明细").[A6].CurrentRegion.Columns.Count     ‘统计工作表中数据区域的列数,并赋值给变量L

For k = 1 To L

Sheets("入库明细").Cells(4, k).Value = ""

Next k    ‘依次清除入库资料输入和查询区

MsgBox "清除已完成!", vbOKOnly & vbInformation, "信息提示"       ‘提示已经清除完成

End Sub

利用宏和VBA设计产品出入库查询系统:_第2张图片

  • 点击关闭按钮,返回工作表“入库明细”
  • 开发工具—插入—按钮(窗体控件)—画出来(系统会自动弹出“指定宏”对话框)—宏名:清空—确定—将按钮名改为“清空入库信息”—右键按钮—设置控件格式—字体/字形/字号等—确定—左键单击按钮,即可执行指定的宏代码

4. 实现入库查询功能

也就是 在“入库明细”表的单元格区域A3:I4中,当输入“产品名称”和“规格”作为查找条件时,利用VBA可以在数据表中查找出符合该条件的入库登记信息,并将该信息完整地展示在设置的单元格区域A3:I4中。若找出多条符合条件的数据,则会在弹出的信息框中显示符合查询条件的总登记数,并会逐条显示,若查不到符合条件的产品信息,则会弹出相应的提示消息框

  • 开发工具—Visual Basic—插入—过程—名称:入库查询,类型:子程序,范围:公共的—确定—双击模块1—加入新代码:

       Public Sub 入库查询()

   Dim k As Long

   Dim i As Integer, j As Integer, num As Integer, num1 As Integer

   Dim flag As Boolean

   Sheets("入库明细").Select       选择“入库信息表”

   If Cells(4, 2).Value = "" Then

       MsgBox "请输入产品编码进行查询!", vbOKOnly & vbInformation, "信息提示"      提示用户输入产品编码进行查询

       Exit Sub

   End If

   If Cells(4, 6).Value = "" Then

       MsgBox "请输入类别进行查询!", vbOKOnly & vbInformation, "信息提示"   提示用户输入类别进行查询        Exit Sub

   End If

   k = Val(Cells(1, 2).Value) + 7     获取数据表的记录行

   i = 8

   Do Until i > k

      If Cells(i, 2).Value = Cells(4, 2).Value And Cells(i, 6).Value = Cells(4, 6).Value Then   如果找到符合查找条件的产品信息,则统计符合条件的信息个数

            flag = True

            num = num + 1

          End If

          i = i + 1      循环查找与产品编码和类别相同的记录行数

   Loop

       For i = 7 To k

       If Cells(i, 2).Value = Cells(4, 2).Value And Cells(i, 6).Value = Cells(4, 6).Value Then    如果找到符合查找条件的产品信息

       For j = 1 To 9

            Cells(4, j).Value = Cells(i, j).Value  将找到的记录信息返回到第4行单元格中

       Next j

           num1 = num1 + 1

           If num1 = num Then  如果是最后一条符合查找条件的产品信息

           MsgBox "符合该查找条件的产品信息已经查询完毕!", vbOKOnly & vbInformation, "信息提示"

       Else

           MsgBox "已经找到" & num & "条记录,单击【确定】按钮可显示下一条信息!", vbOKOnly & vbInformation, "信息提示"

           End If

       End If

   Next I  

   If flag = False Then

       MsgBox "没有找到符合条件的入库产品信息!" & Chr(10) & "" & Chr(13) & "请核实您要产品编码或类别!", vbOKOnly & vbExclamation, "信息提示"

   End If

End Sub

  • 单击【关闭】按钮,返回工作表“入库明细”—插入“按钮”—宏名:入库查询—确定—设置控件格式

5.  实现切换到出库表功能

指如果想查看其他工作表的数据信息,则需要在当前工作表中设置执行按钮来运行相应的VBA程序,即可切换到目标工作表中。步骤:

  • 添加“过程”:“切换到出库明细表”—确定 代码:

Public Sub 切换到出库明细表()

Sheets(“出库明细”).Select    选择“出库明细”工作表

End Sub

  • 单击【关闭】按钮—插入“切换到出库明细表”按钮—宏名:“切换到出库明细表”—确定

6.  实现退出系统功能

步骤:

  • 添加“退出系统”过程—在模块1中添加代码:

Public Sub 退出系统()

 ActiveWorkbook.Save   '保存工作簿    

 ActiveWorkbook.Close   '关闭工作簿

End Sub

  • 关闭—插入“退出系统”按钮—宏名:“退出系统”—确定

到这里,就完成了“入库明细”工作表中各功能按钮的设计操作

二、 实现出库明细表的内部功能

  1. 实现产品出库登记功能

即 当在工作表“出库明细”的单元格区域A4:L4中输入一条产品出库信息时,执行VBA程序可将该条信息存放在数据表的最后一行,并且出库次数也会随之自动更新。若输入的出库信息不完整,则会弹出相应的提示消息框。步骤:

  • 切换到工作表“出库明细”—打开VBA窗口—插入—模块(2)—插入—过程:出库明细—输入代码:

Public Sub 出库明细()

Dim i As Long

Dim j As Integer

Sheets("出库明细").Select    '选择工作表“出库明细”

If Cells(4, 1).Value = "" Then

    MsgBox "请输入出库单号!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

    End If

    If Cells(4, 2).Value = "" Then

    MsgBox "请输入产品编码!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

End If

If Cells(4, 3).Value = "" Then

    MsgBox "请输入产品名称!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

End If

If Cells(4, 4).Value = "" Then

    MsgBox "请输入规格!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

End If

If Cells(4, 5).Value = "" Then

    MsgBox "请输入单位!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

End If

If Cells(4, 6).Value = "" Then

    MsgBox "请输入类别!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

End If

If Cells(4, 7).Value = "" Then

    MsgBox "请输入成本单价!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

End If

If Cells(4, 8).Value = "" Then

    MsgBox "请输入数量!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

End If

If Cells(4, 9).Value = "" Then

    MsgBox "请输入销售单价!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

End If

If Cells(4, 10).Value = "" Then

    MsgBox "请输入销售日期!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

End If

If Cells(4, 11).Value = "" Then

    MsgBox "请输入客户!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

End If

If Cells(4, 12).Value = "" Then

    MsgBox "请输入业务员!", vbOKOnly & vbExclamation, "信息提示"

    Exit Sub

End If

i = Val(Sheets("出库明细").Cells(1, 2).Value)

For j = 1 To i

    Cells(i + 8, j).Value = Cells(4, j).Value

Next

End Sub

End Sub

  • 关闭—开发工具—插入—宏:出库登记—确定

实现产品出库查询功能:

在单元格区域A3:L4中,当输入“产品编码”和“类别”作为查询条件时,利用VBA程序可以在数据表中查找出符合该查找条件的出库登记信息,并将该信息完整地显示在设置的单元格区域A3:L4中。若查出多条符合条件的出库登记信息,则该程序会在弹出的消息框中显示符合该查找条件的总登记数,并会逐条显示,若未查到符合条件的记录,则弹出相应的消息提示框。步骤:

  • 开发工具—visual basic –模块2--插入--过程“出库查询”—代码:

Public Sub 出库查询()

Dim k As Long

Dim i As Integer, j As Integer, num As Integer, num1 As Integer

Dim flag As Boolean

Sheets("出库明细").Select

If Cells(4, 2).Value = "" Then

    MsgBox "请输入产品编码进行查询!", vbOKOnly & vbInformation, "信息提示"

    Exit Sub

 End If

 If Cells(4, 6).Value = "" Then

    MsgBox "请输入类别进行查询!", vbOKOnly & vbInformation, "信息提示"

    Exit Sub

End If

k = Val(Cells(1, 2).Value) + 7       '记录的行数

i = 8                           '记录开始的行数号

If Cells(i, 2).Value = Cells(4, 2).Value And Cells(i, 6).Value = Cells(4, 6).Value Then

flag = True

num num + 1        '找到符合条件的信息后,返回符合条件的个数

End If

i = i + 1

Loop

For i = 8 To k

If Cells(i, 2).Value = Cells(4, 2).Value And Cells(i, 6).Value = Cells(4, 6).Value Then

    For j = 1 To 12

    Cells(4, j).Value = Cells(i, j).Value   '将找到的信息返回到第四行单元格里

    Next j

    num1 = num1 + 1

    If num1 = num Then MsgBox "符合该查找条件的出库信息已查询完毕!", vbOKOnly, "信息提示"

    Else

    MsgBox "已找到" & num & "条记录,单击【确定】按钮可显示下一条信息!", vbOKOnly & vbInformation, "信息提示"

    End If

    End If

    Next i

    If flag = False Then

    MsgBox "没有找到符合条件的出库信息!", vbOKOnly & vbExclamation, "信息提示"

    End If

End Sub

End Sub

(if – Loop, for -- next)

  • 关闭—插入按钮“出库查询”—指定宏:“出库查询”—确定

2.  实现清空出库信息功能

即 清空在单元格区域A3:L4中添加的出库产品的信息,出库登记或出库明细查询后需要清空信息,然后再进行下一步工作。设置此功能可以一键清除。步骤:

  • 开发工具—visual basic—双击“模块2”—插入—过程:“清空出库信息”。代码如下:

Public Sub 出库查询()

       Dim i As Integer

       Dim j As Integer

       j = Sheets("出库明细").[A3].CurrentRegion.Columns.Count      '统计工作表中的数据区域的列数

       For i = 1 To j

   Sheets("出库明细").Cells(4, i).Value = ""

   Next i

End Sub

  • 关闭—插入按钮“出库查询”—宏名:“出库查询”—确定

3.  实现切换到入库表功能

步骤:

  • 开发工具—visual basic—双击模块2—插入过程“切换到入库明细表”—代码:

Public Sub 切换到入库信息表()

Sheets("入库明细").Select

End Sub

  • 关闭—插入按钮“切换到入库明细表”—宏名:切换到入库明细表—确定

4.  实现退出系统功能

步骤:

  • 开发工具—visual basic—模块2--插入过程“退出系统”—代码:

Public  Sub 退出系统()

       ActiveWorkbook.save

       ActiveWorkbook.close

End Sub

  • 关闭—插入按钮“退出系统”—宏名:模块2:退出系统—确定

5.  设计查询系统界面

在完成产品出入库管理系统内部功能的相关设计后,为了统一管理,防止信息泄露,接下来使用窗体为其制作一个访问界面,并利用VBA程序代码对进入该系统的用户进行口令控制。步骤:

  • 开发工具—visual basic—模块2—插入—用户窗体(此时插入了一个名为UserForm1的用户窗体,此时系统还会自动打开控件“工具箱”)—工具箱—属性窗口,弹出“属性”窗口—按字母选项卡--【名称】与【Caption】框中均输入“查询系统”--利用宏和VBA设计产品出入库查询系统:_第3张图片--选中“工具箱”里的“标签按钮”并画出来—属性—在【Caption】中输入“产品出入库查询系统”,也可在【Font】里设置字体—按同样的方法添加“用户名”、“登录密码”控件标签—单击工具箱中的“文字框控件”—在刚刚添加的“用户名”和“登录密码”下面添加文字框控件利用宏和VBA设计产品出入库查询系统:_第4张图片--选中登录密码的文字框—属性—按字母序—PasswordChar:*,即当在登录窗口中的【登录密码】文字框中输入密码时,系统会以“*”的形式显示—单击工具箱中的“命令按钮”,并画出来—属性—Caption:产品入库—双击添加的命令按钮,即可进入其代码编辑窗口,在其中输入以下代码:

Private Sub CommandButton1_Click()

If TextBox1.Text = "xiaobaihuazhuangpin" And TextBox2.Text = "123456" Then '验证用户名和登录密码

     Sheets("入库明细").Select

查询系统.Hide            '隐藏该用户窗体

     Exit Sub

Else

     MsgBox "请输入正确的用户名和登录密码!", vbOKOnly & vbInformation, "提示"

End If

End Sub

End Sub

  • 关闭窗口,返回“查询系统”—添加“产品出库”命令按钮—双击“产品出库”按钮—代码:

Private Sub CommandButton2_Click()

If TextBox1.Text = "xiaobaihuazhuangpin" And TextBox2.Text = "123456" Then '验证用户名和登录密码

Sheets("出库明细").Select

Else

MsgBox "请输入正确的用户名和登录密码!", vbOKOnly & vbInformation, "提示"   

End If

End Sub

  • 继续在用户窗体中添加“退出系统”命令按钮—双击“退出系统”按钮—输入代码:

Private Sub CommandButton3_Click()

ActiveWorkbook.Save

ActiveWorkbook.Close

End Sub

  • 可调整窗体和各控件的大小及位置。可按住Ctrl,再分别按住命令按钮,然后一起设置属性,比如大小、字体等
  • 设置禁用用户窗体标题栏中的【关闭】按钮的VBA程序,限定用户进入系统必须输入正确的用户名和密码。在用户窗体代码的编辑窗口中的“对象”下拉列表框中选择【User-Form】--在“过程”下拉列表框中选择【QueryClose】—输入代码:《这里》

利用宏和VBA设计产品出入库查询系统:_第5张图片Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If CloseMode <> 1 Then      '禁用用户窗体标题栏中的【关闭】按钮

Cancle = True

End If

End Sub

  • 接下来设置在每次打开工作簿时,系统都能自动地调出登录界面:

开发工具—visualbasic--【工程资源管理器】--双击ThisWorkbook,进入其代码编辑窗口—在【对象】下拉列表框中选择【Workbook】,此时系统将自动在该代码窗口中添加一个Workbook_Open事件处理程序的代码框架—输入代码:

Private Sub Workbook_Open()

    Sheets("Sheet3").Select

    查询系统.Show           '调出创建的窗体

       End Sub

  • 此代码实现的功能是在每次打开工作簿时,系统都会自动选择工作表“Sheet3”,并调出所创建的窗体
  1. 检测查询系统
  1. 检测登录界面
  2. 检测产品入库查询
  3. 检测产品出库查询

你可能感兴趣的:(办公软件)