APP下载

Excel Visual Basic应用程序在医院医用耗材管理中的应用分析

2019-03-07冯锦丽

中国医学装备 2019年2期
关键词:选项卡耗材表格

朱 俊 冯锦丽

医院耗材管理形式上是数据统计,本质上是数据处理,主要包括数据的录入、出入库、盘库及其数据统计工作,最终实现账物相符。数据统计方面,通常需要对多方数据进行提取、筛选、排序、函数和公式、分类汇总、数据透视表、数据比对、数据维护等单项或综合性的操作处理。而上述这些高级应用,绝大部分应用者在日常应用中的选项卡或多重综合重复处理即可实现,但是对于不同权限用户管理、多重数据比对等,采用简单的统计处理将难以为继,需要采用高级编程功能实现。

通常,医院的各类数据管理采用数据库形式,而医院的医院信息系统在耗材管理方面,其搭载的子系统为物资管理程序(简称系统),版本号Ver 2.9.3。该系统软件是由PB语言编程,后台数据库采用ORACLE数据库管理系统[1]。该软件客观记录了入库、出库、网上请领、在线查询库存、采购管理、目录(价格)维护等日常操作业务,还可以物资盘点、账务管理等一系列综合查询,能出具出入库报表、明细报表等统计报表。但该系统导出的数据,不能分级实施权限管理和自动进行数据比对,为此需运用基于Excel的Visual Basic应用程序(Visual Basic application,VBA)编写一段医用耗材管理程序解决该问题。基于此,本研究结合Microsoft的Excel,采用Office 2007版进行初步处理,运用编程的方法快速、精准及高效地进行医用耗材管理。

1 Excel VBA程序概述

VBA区别于传统的宏语言、脚本语言,是一种面向对象的程序设计方法,提供完整的程序设计语言。Excel VBA是Office一个应用程序套件,内嵌了功能强大的VB编程语言,用来开发自定义Office解决方案。由于VBA的存在,Office就不仅仅是应用程序,更是一个开发平台,计算机用户可以利用VBA对Office进行二次开发,极大扩展其功能[2-3]。

VBA在Excel中的编程平台是Visual Basic编辑器(Visual Basic editor,VBE)[4]。有两种VBE打开方式:①快捷键方法,Alt+F11,F7代码窗口;②选项卡方法,在“开发工具”选项卡中,代码窗体中点“Visual Basic”或“控件”窗体中,点“设计模式”或通过双机控件查看后台代码。如果未显示“开发工具”选项卡,则Office按钮Word选项常用勾选“在功能区显示‘开发工具’选项卡”。运行也有两种方法,即快捷键F5和运行“运行子程序/用户窗体”。

Excel工作簿的存在包含关系,一般工作表sheet∈工作薄workbook,即一个工作薄中一般有多个工作表sheet,默认状态有3个工作表,即Sheet1、Sheet2和Sheet3,根据需要还可以新建工作表Sheet。一般导出的excel表默认的将数据存放在第一张工作表Sheet1中默认此命名,Sheet2、Sheet3为空白表,无数据,可视情况加入导入数据。

2 Excel VBA程序设计

2.1 设计思想

充分实现海量数据的统计、筛选及比对。编程设计中需要注意:①尽量使用系统中导出的数据,尽量不要人为编辑、干预及错误,以免格式、字符等更改导致无法调试出程序;②编程是非常严谨的工作,命名、语句、换行符以及非法字符必须严格符合语句定义,否则任何一个环节都可能无法调试出程序;③要理清设计思路,精心编程,查找问题,分析解决问题。如If…Then…后面的语句,如果只有一句命令的话,Then后面不需要换行,否则容易出现编译错误,无法调试结果。

2.2 不同工作表的权限管理

导出一个工作薄的不同工作表,对其登录权限区别管理,对不同用户使用不同的登录权限:①管理员,赋予打开所有表格权限,并且可编辑修改等;②普通职员,仅限于自己的个人权限,只能查看,不可编辑修改,从而实现不同人员权限的登录管理[5-6]。

2.3 数据比对

物资管理系统中导出两张表格或工作薄,对两张表格≥2行/列元素,如4列的表格进行一一比对。如果所比较对象的4行/列元素完全一致,则标记为相同的条目;否则任何一行/列不一致,则不作标记,从而确定两张表中的物资是否为同一条物资目录。

3 Excel VBA程序实现

3.1 不同工作表的权限管理

进入VBE界面,左侧的“工程”窗口中ThisWorkbook选择Workbook_Open事件的程序如下:

Private Sub workbook_open()

Application.visible = False: Userform1.show'登录界面的显示和控制

End Sub

继续在VBE界面,左侧的“工程”窗口中或插入用户窗体,双击“UserForm1”。在控件工具中插入两个标签label、两个文本框Text、两个命令按钮CommandButton。并对各自的属性、字体格式等相关修改,其中密码文本框PasswordChar的属性设置为“*”[7-8]。

“登录”命令按钮CommandButton1下的Click,对应的程序如下:

Private Sub CommandButton1_Click()

If TextBox1.Text="a" And TextBox2.Text="123" Then'管理用户a登录

UserForm1.Hide

For i=1 To Sheets.Count

Sheets(i).Visible=True'显示Sheet1、Sheet2、Sheet3全部工作表

Next i

ElseIf TextBox1.Text="s1" And TextBox2.Text="123" Then's1用户登录

UserForm1.Hide

Sheets(1).Visible=True'只显示Sheet1工作表Sheets(2).Visible=False

Sheets(3).Visible=False

Sheets(1).Protect'保护Sheet1工作表

ElseIf TextBox1.Text="s2" And TextBox2.Text="123" Then's2用户登录

UserForm1.Hide

Sheets(1).Visible=False

Sheets(2).Visible=True'只显示Sheet2工作表

Sheets(3).Visible=False

Sheets(2).Protect'保护Sheet2工作表

ElseIf TextBox1.Text="s3" And TextBox2.Text="123" Then's3用户登录

UserForm1.Hide

Sheets(1).Visible=False

Sheets(2).Visible=False

Sheets(3).Visible=True'只显示Sheet3工作表Sheets(3).Protect'保护Sheet3工作表

Else

MsgBox "用户名或密码错误,请重新登录!"End If

End Sub

其中,可见采用Protect可以实现编辑保护功能,同理,若取消保护则用Unprotect即可。

“退出”命令按钮CommandButton2下的Click,对应的程序如下:

Private Sub CommandButton2_Click()

Unload Me

ThisWorkbook.Close

End Sub

3.2 数据比对

(1)方法一。从系统中导出两张表后,同时放在同一工作簿的不同工作表中,原始的表格为默认的Sheet1,当前待处理表格为默认的Sheet2,空表表默认Sheet3闲置,不用处理。

Private Sub 数据比对()

Dim i As Integer, j As Integer

Dim M As Integer, N As Integer

M=Sheets(1).UsedRange.Rows.Count'M为初始表格行数

N=Sheets(2).UsedRange.Rows.Count'N为当前表行数

If M<=N Then

For i=2 To M

For j=2 To N

If Sheets(1).Cells(i, 1)=Sheets(2).Cells(j,1)Then

If Sheets(1).Cells(i,2)=Sheets(2).Cells(j,2)Then

If Sheets(1).Cells(i,3)=Sheets(2).Cells(j,3)Then

If Sheets(1).Cells(i,4)=Sheets(2).Cells(j,4)Then

Sheets(1).Cells(i,5)="*" '条目有相同,则标记为"*",并放在Sheet1工作表的第5列中

End If

End If

End If

End If Next j Next i Else

MsgBox "初始表Sheet1和待处理表Sheet2行数比对溢出,请调整行数!"

End If

End Sub

(2)方法二。系统中直接导出两张不同的表格,并放在D盘中,原始表命名为m,当前待处理表格命名为n。

Sub 数据比对()

Dim i As Integer, j As Integer

Dim M As Integer, N As Integer

Dim goods1_name As String, goods2_name As String

Dim goods1_type As String, goods2_type As String

Dim goods1_unit As String, goods2_unit As String

Dim goods1_manufacturer As String, goods2_manufacturer As String

Application.ScreenUpdating=False

Workbooks.Open "D: M.XLS"

M=ThisWorkbook.Sheets(1).UsedRange.Rows.Count'M为初始表格行数

N=ActiveWorkbook.Sheets(1).UsedRange.Rows.Count'N为当前表行数

For i=2 To M

goods1_name=ThisWorkbook.Sheets(1).Cells(i,1)

goods1_type=ThisWorkbook.Sheets(1).Cells(i,2)

goods1_unit=ThisWorkbook.Sheets(1).Cells(i,3)

goods1_manufacturer=ThisWorkbook.Sheets(1).Cells(i,4)

For j=2 To N

goods2_name=ActiveWorkbook.Sheets(1).Cells(j,1)

goods2_type=ActiveWorkbook.Sheets(1).Cells(j,2)

goods2_unit=ActiveWorkbook.Sheets(1).Cells(j,3)

goods2_manufacturer=ActiveWorkbook.Sheets(1).Cells(j,4)

If goods1_name=goods2_name And goods1_type=goods2_type And goods1_unit=goods2_unit And goods1_manufacturer=goods2_manufacturer Then

ThisWorkbook.Sheets(1).Cells(i,5)="*" '标记相同条目为“*”,并放在第5列

End If

Next j

Next i

ActiveWorkbook.Close

Application.ScreenUpdating=True

End Sub

可见,用上述两种方法运行比较得出,方法一较方法二算法更简洁,速度更快,更节约运行时间。

4 Excel VBA程序运行结果

4.1 不同工作表的权限管理

根据设计思路,编程调试实现后,对应其运行结果。双击打开工作簿,即跳转进入登录界面窗体,当登录为管理员用户a和密码123时,工作簿下的所有工作表Sheet1、Sheet2及Sheet3全部显示,无保护状态,可自由编辑、更改;当登录为s1且密码123时,只显示Sheet1表且处于保护状态,不可编辑、更改,而Sheet2 、Sheet3隐藏不显示;……;类推,只显示Sheet2表和Sheet3表。如果登录的账户名或密码任意一项有错或无输入,如输入错误用户名“aa”,则提示“用户名或密码错误,请重新登录!”[1]对话框,其权限管理界面如图1所示。

图1 权限管理界面图

图2 多重数据比对界面图

4.2 数据比对

对物资名称、规格、单位及厂家4个条件同时完全相同的条目进行价格对照,比较2008年的入库价与2010年建立的现行仍在执行的价格,如果价格不一样的条目,则用星号“*”标记出来。常常应用在医院与京津冀价格比较、调价,前后目录库比对(如图2所示)。

Sheet1中比对结果表中的第2行名称为“11F尿试纸条”与Sheet2中的第4行名称为“11F尿试纸条”,其规格、单位及厂家3个条件也完全一致,则在Sheet1的第五列E列用星号“*”标记。类比其他数据,对应的比对相同的结果,从而实现海量数据的相同项的比对。

Sheet1中比对结果表中的第5行名称为“ABORH血型确认卡”与Sheet2中的第8行名称为“ABORH血型确认卡”,虽然其名称、单位及厂家3个条件相同,但其规格“8孔/卡,4*12卡/盒”“8孔/卡,2*25卡/盒”不同而得以区分。相反,Sheet1中比对结果表中的第6行名称也为“ABO-RH血型确认卡”,与Sheet2中的上述的完全一致,而被标记星号“*”。类比其他数据,比对不相同的结果,从而实现海量数据的不相同项的区分。

5 结语

Excel VBA不仅可以应用于医用耗材管理,并可用于医疗设备管理、医院病例数据分析统计、神经系统学、医学影像学及生物化学等各学科中[9-14]。数据统计是医院设备耗材管理的重要方面,通过Excel VBA对不同权限用户管理、多重数据比对的应用分析,以及编程方法在工作中的高级应用,可极大减少人为操作,降低错误率,有效提高工作效率[15-16]。

猜你喜欢

选项卡耗材表格
贝昂 无耗材空气净化器
贝昂 无耗材空气净化器
贝昂 无耗材空气净化器
贝昂 无耗材空气净化器
《现代临床医学》来稿表格要求
统计表格的要求
PPT中巧作形意信息图
巧用Word替换纠正角标跑偏
禁用一切 优化无限
履历表格这样填