暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用EXCEL编写一个来电记录软件

数据中心知识 2022-05-13
188

设计缘由

    无纸化办公是很多年前的口号了,在此也分享一个很多年前用EXCEL制作的一个小工具,其实现在很多场景也是可以用得上的,希望对大家有用。

    在那个还没有IP电话更改号码实施电信诈骗的年代,在那个各行各业还没有全部通过疯狂电话推销业务的年代,在那个手机接听和漫游都需要另外收费的年代,公司固定电话还是主要的业务联系工具,公司是配电话程控交换机的,来电也是有专门电话接线员的。

    电话接线员的工作一方面是解答业务咨询和电话转接,另一方面就是来电记录。作为一家IT公司,要是电话记录还是用小本子的方式,有点太LOW了,用电子记录的话,接电话的过程中想完整记下来内容就需要很简便操作才可以,要是等电话挂了后再来补充记录,说不定电话挂了之后又会立马来新的电话。一条一条记录写在表格里面,要是在接电话时候的慌乱操作很容易将前面记录的内容误删除掉。

    之所以分享这个文章,可能以上这些类似的问题,也有人遇到过,下面就说一下我当时的解决办法。


解决方案

    很多同学对EXCEL并不是特别熟悉,其实EXCEL有着非常强大的功能,公众号前面的文章也分享过一个使用EXCEL做报价工具的内容,有兴趣的朋友可以关注后查阅。两篇文章用到的知识不太一样,上篇文章主要是讲解公式,这篇文章主要是vba宏的编写。


    新建一个工作簿,工作簿里面创建6个工作表如上图。其中表单和统计的两个工作表,完成后可以隐藏起来。表单里面就存放一些快捷内容,用于制作下拉按钮里面内容的,比方说员工姓名、来电事由、处理结果等等,方便快捷选择。统计里面就是一条一条的记录。


    首页只是为了装点门面的,没啥用,做了四个超链接,分别链接到不同的工作表。所有单元格属性都设成保护---隐藏和锁定。


    来电录入工作表中,上面是三个超链接,下面是两个按钮,中间的部分是录入内容。时间这块是自动取当时的时间,这个用个公式就可以了。通过下拉菜单将部分快捷输入部分内容,关键在于两个按钮,下面就将两个按钮对应的vba内容粘贴如下:

    保存按钮的代码,代码非常简单,就是将记录的内容写到工作表记录的空行里面:

Sub 来电保存()

Application.ScreenUpdating = False  '停止屏幕刷新

'找出记录表中空行的行号,用x表示

   Dim x, y

   x = 2

   Do While Not (IsEmpty(Sheets("记录").Cells(x, 5).Value))

   x = x + 1

   Loop

   y = 2

   Do While Not (IsEmpty(Sheets("记录").Cells(y, 17).Value))

   y = y + 1

   Loop

   '来电号码必须输入

If Sheets("来电录入").Range("B7") = "" Then

   Sheets("来电录入").Range("B15") = "电话号码不能为空"

Else

   Sheets("记录").Cells(x, 1) = x - 1  '序号

   Sheets("记录").Cells(x, 2) = Sheets("来电录入").Cells(4, 2)   '来电日期

   Sheets("记录").Cells(x, 3) = Sheets("来电录入").Cells(4, 5)   '来电时间

   Sheets("记录").Cells(x, 4) = Sheets("来电录入").Cells(13, 2)   '接线人

   Sheets("记录").Cells(x, 5) = Sheets("来电录入").Cells(7, 2)   '电话号码

   Sheets("记录").Cells(x, 6) = Sheets("来电录入").Cells(8, 2)   '来电人

   Sheets("记录").Cells(x, 7) = Sheets("来电录入").Cells(9, 2)   '性别

   Sheets("记录").Cells(x, 8) = Sheets("来电录入").Cells(10, 2)   '单位

   Sheets("记录").Cells(x, 9) = Sheets("来电录入").Cells(11, 2)   '事由

   Sheets("记录").Cells(x, 10) = Sheets("来电录入").Cells(12, 2)   '详细情况

   Sheets("记录").Cells(x, 11) = Sheets("来电录入").Cells(14, 2)   '回复情况

   '记录录入过的日期

   If Sheets("记录").Cells(y - 1, 17) <> Sheets("来电录入").Cells(4, 2) Then

      Sheets("记录").Cells(y, 17) = Sheets("来电录入").Cells(4, 2)

   End If

   Range("B7:B15").ClearContents   '清除记录中的数据

   Range("B7").Select   '选中单元格以便输入相关数据

End If

   Application.ScreenUpdating = True  '开始屏幕刷新

End Sub


清空按钮的代码更简单:

Sub 来电清空()

   Range("B7:B15").ClearContents   '清除记录中的数据

   Range("B7").Select   '选中单元格以便输入相关数据

End Sub


    代码很简单,也很容易看明白,就不详细解释了,若有疑问可以留言沟通。


    处理录入工作表,最上面三个超链接,中间一部分只读内容,然后5个按钮,道理跟上面都是一样,这里只贴代码如下:

Public xx   '定义全局指针

Sub 处理查询()

Application.ScreenUpdating = False  '停止屏幕刷新

Dim x, i, a, b

'首先查出记录表的行数,用a表示

a = 2

Do While Not (IsEmpty(Sheets("记录").Cells(a, 5).Value))   '认为电话号码非空的一行应该是有记录的一行

    a = a + 1

Loop

b = 0  '给标签赋一个初值

x = 2

'找到符合条件的那一行,用x表示

For i = 2 To a - 1

  If Sheets("记录").Cells(i, 2) = Sheets("处理录入").Cells(4, 2) Then         '来电日期

     b = 9       '找到后,标签重新赋值

     x = i

     xx = i

     Exit For

  End If

Next

If b = 0 Then

   Sheets("处理录入").Range("G6") = "您查询的记录不存在"

 Range("B5,E4,E5,B8,D8,F8,B9,B10,B11,B12,B21,G9,G12").ClearContents    '清除单元格内容

   Range("B4").Select   '选中单元格以便输入相关数据

Else

 Range("B4,B5,E4,B8,D8,F8,B9,B10,B11,B12,B21,G6,G9,G12,B18,B19,B20").ClearContents    '清除单元格内容

   Sheets("处理录入").Cells(5, 5) = Sheets("记录").Cells(x, 1)   '序号

   Sheets("处理录入").Cells(4, 2) = Sheets("记录").Cells(x, 2)   '日期

   Sheets("处理录入").Cells(4, 5) = Sheets("记录").Cells(x, 3)   '时间

   Sheets("处理录入").Cells(5, 2) = Sheets("记录").Cells(x, 4)   '接线人

   Sheets("处理录入").Cells(8, 2) = Sheets("记录").Cells(x, 5)   '电话号码

   Sheets("处理录入").Cells(8, 4) = Sheets("记录").Cells(x, 6)   '来电人

   Sheets("处理录入").Cells(8, 6) = Sheets("记录").Cells(x, 7)   '性别

   Sheets("处理录入").Cells(9, 2) = Sheets("记录").Cells(x, 8)   '单位

   Sheets("处理录入").Cells(10, 2) = Sheets("记录").Cells(x, 9)   '事由

   Sheets("处理录入").Cells(11, 2) = Sheets("记录").Cells(x, 10)   '详细情况

   Sheets("处理录入").Cells(12, 2) = Sheets("记录").Cells(x, 11)   '回复情况

End If

   Range("B18").Select   '选中单元格以便输入相关数据

   Application.ScreenUpdating = True  '开始屏幕刷新

End Sub

Sub 处理上一条()

Application.ScreenUpdating = False  '停止屏幕刷新

Dim x, i, b

b = 0  '给标签赋一个初值

x = xx - 1

'找到符合条件的那一行,用x表示

For i = xx - 1 To 2 Step -1

  If Sheets("记录").Cells(i, 2) = Sheets("处理录入").Cells(4, 2) Then         '来电日期

     b = 9       '找到后,标签重新赋值

     x = i

     xx = i

     Exit For

  End If

Next

If b = 0 Then

   Sheets("处理录入").Range("G9") = "已到第一条"

   Range("B18,B19,B20,G12,G6").ClearContents    '清除单元格内容

   Range("B4").Select   '选中单元格以便输入相关数据

Else

 Range("B4,B5,E4,B8,D8,F8,B9,B10,B11,B12,B21,G6,G9,G12,B18,B19,B20").ClearContents    '清除单元格内容

   Sheets("处理录入").Cells(5, 5) = Sheets("记录").Cells(x, 1)   '序号

   Sheets("处理录入").Cells(4, 2) = Sheets("记录").Cells(x, 2)   '日期

   Sheets("处理录入").Cells(4, 5) = Sheets("记录").Cells(x, 3)   '时间

   Sheets("处理录入").Cells(5, 2) = Sheets("记录").Cells(x, 4)   '接线人

   Sheets("处理录入").Cells(8, 2) = Sheets("记录").Cells(x, 5)   '电话号码

   Sheets("处理录入").Cells(8, 4) = Sheets("记录").Cells(x, 6)   '来电人

   Sheets("处理录入").Cells(8, 6) = Sheets("记录").Cells(x, 7)   '性别

   Sheets("处理录入").Cells(9, 2) = Sheets("记录").Cells(x, 8)   '单位

   Sheets("处理录入").Cells(10, 2) = Sheets("记录").Cells(x, 9)   '事由

   Sheets("处理录入").Cells(11, 2) = Sheets("记录").Cells(x, 10)   '详细情况

   Sheets("处理录入").Cells(12, 2) = Sheets("记录").Cells(x, 11)   '回复情况

   xx = x

End If

  Range("B18").Select   '选中单元格以便输入相关数据

   Application.ScreenUpdating = True  '开始屏幕刷新

End Sub

Sub 处理下一条()

Application.ScreenUpdating = False  '停止屏幕刷新

Dim x, a, i, b

'首先查出记录表的行数,用a表示

a = 2

Do While Not (IsEmpty(Sheets("记录").Cells(a, 5).Value))   '认为电话号码非空的一行应该是有记录的一行

    a = a + 1

Loop

b = 0  '给标签赋一个初值

x = xx + 1

'找到符合条件的那一行,用x表示

For i = xx + 1 To a - 1

  If Sheets("记录").Cells(i, 2) = Sheets("处理录入").Cells(4, 2) Then         '来电日期

     b = 9       '找到后,标签重新赋值

     x = i

     xx = i

     Exit For

  End If

Next

If b = 0 Then

   Sheets("处理录入").Range("G12") = "已到最后一条"

   Range("B18,B19,B20,G9,G6").ClearContents    '清除单元格内容

   Range("B4").Select   '选中单元格以便输入相关数据

Else

Range("B4,B5,E4,B8,D8,F8,B9,B10,B11,B12,B21,G6,G9,G12,B18,B19,B20").ClearContents    '清除单元格内容

   Sheets("处理录入").Cells(5, 5) = Sheets("记录").Cells(x, 1)   '序号

   Sheets("处理录入").Cells(4, 2) = Sheets("记录").Cells(x, 2)   '日期

   Sheets("处理录入").Cells(4, 5) = Sheets("记录").Cells(x, 3)   '时间

   Sheets("处理录入").Cells(5, 2) = Sheets("记录").Cells(x, 4)   '接线人

   Sheets("处理录入").Cells(8, 2) = Sheets("记录").Cells(x, 5)   '电话号码

   Sheets("处理录入").Cells(8, 4) = Sheets("记录").Cells(x, 6)   '来电人

   Sheets("处理录入").Cells(8, 6) = Sheets("记录").Cells(x, 7)   '性别

   Sheets("处理录入").Cells(9, 2) = Sheets("记录").Cells(x, 8)   '单位

   Sheets("处理录入").Cells(10, 2) = Sheets("记录").Cells(x, 9)   '事由

   Sheets("处理录入").Cells(11, 2) = Sheets("记录").Cells(x, 10)   '详细情况

   Sheets("处理录入").Cells(12, 2) = Sheets("记录").Cells(x, 11)   '回复情况

   xx = x

End If

  Range("B18").Select   '选中单元格以便输入相关数据

   Application.ScreenUpdating = True  '开始屏幕刷新

End Sub

Sub 处理保存()

Application.ScreenUpdating = False  '停止屏幕刷新

If Sheets("处理录入").Range("B8") = "" Then

   Sheets("处理录入").Range("B21") = "请先选中要处理的记录"

Else

Dim x

x = xx

'首先判断有没有被处理过

If Sheets("记录").Cells(x, 16) <> "" Then

   Sheets("处理录入").Range("B21") = "此记录已被处理,不能再次处理"

Else

'处理人必须输入

  If Sheets("处理录入").Range("B20") = "" Then

      Sheets("处理录入").Range("B21") = "处理人不能为空"

  Else

     Sheets("记录").Cells(x, 12) = Sheets("处理录入").Cells(16, 2)   '处理日期

     Sheets("记录").Cells(x, 13) = Sheets("处理录入").Cells(16, 5)   '处理时间

     Sheets("记录").Cells(x, 14) = Sheets("处理录入").Cells(18, 2)   '处理情况

     Sheets("记录").Cells(x, 15) = Sheets("处理录入").Cells(19, 2)   '处理结果

     Sheets("记录").Cells(x, 16) = Sheets("处理录入").Cells(20, 2)   '处理人

     Range("B18:B21").ClearContents    '清除单元格内容

  End If

End If

  Range("B18").Select   '选中单元格以便输入相关数据

   Application.ScreenUpdating = True  '开始屏幕刷新

End If

End Sub

Sub 处理清空()

Range("B4,B5,E4,E5,B8,D8,F8,B9,B10,B11,B12,B21,G6,G9,G12").ClearContents    '清除单元格内容

End Sub


    来电查询工作表,上面三个超链接,中间一些内容单元格,下面四个按钮,按钮对应的代码相信不用再过多介绍了,程序员被称为码农,因为一直做着重复的事情。


写在后面

    EXCEL里面插入按钮,很多同学可能会觉得新鲜,估计学校都没有怎么教过。在这里给大家稍微普及一下,有兴趣的同学可以试试。希望这篇文章对各位有所作用。

    vba是逻辑非常简单的代码,同时还由EXCEL提供了界面,连界面设计都省了,结合EXCEL自带的公式,是个非常好用的工具。

    也提醒大家一下,vba可是啥都能做得到的哟,比方说关机按钮,比方说文件操作,数据库操作,磁盘操作,信息读取等等,杀毒软件厂商是很懂的,所以有宏病毒之说。不了解vba,可能打开一个office文档都会中招!


感谢各位的阅读,本公众号会持续分享实际的服务案例,若感兴趣请关注该公众号。


需要上门解决问题时,请及时联系我们!

更多案例文章,请点击!


文章转载自数据中心知识,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论