xcel中VBA编程在卫生部单病种质量控制指标系统自动处理病例上报的应用

更新时间:2024-02-22 作者:用户投稿原创标记本站原创 点赞:24467 浏览:102308

摘 要 :借助Excel的VBA(Visual Basic for Applications, VBA)编程语言开发应用卫生部单病种质量控制指标系统的病例上报策略.由于Excel具有数据处理简易性,开发和维护的低成本性,使该方法在各级医疗单位实用性、可行性高并易于推广,从而促使我国病种质量管理措施评价系统的完善与发展.

关 键 词 :Excel;VBA编程;单Excel中VBA编程在卫生部单病种质量控制指标系统自动处理病例上报的应用

在2005年,我国卫生部下发了《医院管理评价指南》,并依托中国医院协会开发了"单病种质量控制指标系统",通过全国各医疗单位上传的病例数据,对各病种诊疗过程的进行横向、纵向分析,以达到提高医疗质量的目的.作为医疗单位,如何保证全院数千甚至数万病例数据准确、及时、高效上报,值得深入研究.Excel电子表格的数据处理在现今在医学领域得到广泛应用[1-2],利用其中的VBA编写的自动化处理程序可为医学领域中样本数据提供低成本、高效率应用.VBA为本文将详细阐述应用Excel对病例数据进行自动化上报的应用,可为各医疗单位提供一套免费、高效的病例上报解决方案.

1.方法

本院电子病历系统为内网系统,卫生部"单病种质量控制指标系统"为外网系统,故本院上报需进行内外网切换,在此背景下,本实验对本院4名骨科医生(编号A,B,C,D)分别采取一般上报和VBA编程上报完成100例膝关节、髋关节置换术上报所需时间进行实验,并重复实验3次,最后对实验结果进行t检验统计分析.

一般上报方式:A、B、C、D每人负责 25例病例,独自完成病种质量管理措施评价系统所需信息的录入并上报.VBA编程上报方式:将所需录入信息依据其在电子病历中的分布进行分割并制成Excel表,A负责将100名患者年龄、发病日期、入院日期、出院日期信息录入Excel表格中,以此类推分配B、C、D的工作项目;将A,B,C,D四人所录入的信息合并,获得完整的病例信息数据;借助VBA编写的宏模块,自动填单上传.详细步骤如下:

1.1Excel表格制定 按卫生部"单病种质量控制指标系统"中围手术期预防感染(INF)病种报表中所需信息进行制表(见表1).

1.2信息录入 ①录入信息分配:按本院电子病历中信息分布的特点,将页面来源相同的信息打包分配给项目组一个成员完成,如A完成患者年龄、发病日期、入院日期、出院日期信息录入.B,C,D以此类推.②录入信息:Ⅰ卫生部"单病种质量控制指标系统"网页中项目的下拉框中文选项,按其对应顺序的阿拉伯数字录入,如表1中膝关节置换术第一诊断下拉框中"膝骨关节病"为第9个选项,录入数字"9",空白选项录入"0"Ⅱ."出生日期"等Excel表格中录入按"yyyy-mm-dd",即"年-月-日","手术日期"等Excel表格中录入格式"yyyy-mm-dd hh:mm:ss",即"年-月-日 时:分:秒".③录入信息合并:将4人所录入信息按2.1中制定excel表格合并.④录入信息格式标准化:按"单病种质量控制指标系统"将excel表格单元格中的时间信息严格标准化,即"yyyy-mm-dd"/"yyyy-mm-dd hh:mm:ss",转化为文本格式.

1.3 VBA编程及自动填单上传 VBA编写的宏模块,实现excel表格中录入信息的自动填充和提交,以此实现高效上传.代码如下

①定义各变量名

Public mywindow As Object

Public mydocument As Object

Public r As Range, dealFlag As Range

定义常量,可配置,根据xls表格

Public Const countcol As Integer 等于 49 '总列数

Public Const startrow As Integer 等于 3 '起始行数

Public Const countrow As Integer 等于 183 '总行数,xls的行数

Public Const startcol As Integer 等于 1 '起始列数

'定义填充表单元素

Public bgname As String '报告医生 A 1

Public bgdate As String '报告日期 B 2

Public zhzd As Integer '置换诊断 C3

Public jtfee As String '检测体费48

②获取excel表格数据

Public Sub getExcelData()

Dim colvalue As String

For j 等于 startcol To countcol Step 1

colvalue 等于 Trim(r.Cells(1, j).Value)

Select Case j

Case 1

bgname 等于 colvalue

Case 48

jtfee 等于 colvalue

End Select

Next j

End Sub

③获取浏览器窗口

Public Sub getIewindow(ByVal ietitle As String, Optional ByVal waittime As Integer 等于 0)

Dim myshellwindow As New SHDocVw.ShellWindows Dim myindex As Long

For myindex 等于 0 To myshellwindow.Count - 1

If VBA.TypeName(mshellwindow.Item(mindex).document) 等于 TMLDocument" Then

If myshellwindow.Item(myindex).document.Title 等于 ietitle Then

If waittime 等于 1 Then

Do While myshellwindow.Item(myindex).Busy

Application.Wait (Now + TimeValue("0:00:01"))

DoEvents

Loop

End If

Set mydocument 等于 myshellwindow.Item(myindex).document

Set mywindow 等于 myshellwindow.Item(myindex)

myshellwindow.Item(myindex).Visible 等于 True

Exit Sub

End If

End If

Next myindex

End Sub

④.获取上报页面、填充网页并提交

Public Sub autoFillandSubmit()

Dim returnValue As Long

getIewindow ("单病种质量控制指标") '对应打开的浏览器页面标题

If mydocument Is Nothing Then

MsgBox "没有找到打开的IE页面窗口!", vbOKOnly, "错误"

Exit Sub

End If

For i 等于 startrow To countrow Step 1

Set r 等于 Range("A" & i & ":" & "AA" & i)'可考虑配置化

Set dealFlag 等于 Range("AX" & i)'可考虑配置化

If dealflag.Value 等于 "ok" Then '可以分多次处理,已经处理过的记录不会重复处理

GoTo continue

End If

Call getExcelData

Do While mywindow.Busy

DoEvents

Loop

With mydocument.forms(0)

.Item("ctl00$SampleContent$AddControl1$ctl00$BGName").Value 等于 bgname '报告医生

.Item("ctl00$SampleContent$AddControl1$ctl00$BGTime").Value 等于 bgdate '报告时间

.Item("ctl00$SampleContent$AddControl1$ctl00$Ddl_hip011").Item(zhzd).Selected 等于 True '置换诊断

.Item("ctl00$SampleContent$AddControl1$ctl00$Txt_hip113").Value 等于 see '检测体费

mydocument.getElementById("ctl00_SampleContent_AddControl1_ctl00_ButAdd").Click '提交

⑤返回提交结果并继续

dealflag.Value 等于 "ok"

returnValue 等于 MsgBox("已处理第" & i & "行记录,患者住院:" & hzid & ",患者姓名:" & hzname & ",是否继续!", vbYesNo, "提示")

If returnValue 等于 vbNo Then '可以分批处理,点击取消则从下一条开始

Exit Sub

End If

End With

continue:

Next i

Set mydocument 等于 Nothing

Set mywindow 等于 Nothing

End Sub

⑥继续上传下一病例 为避免批量错误上传,本程序设定在一个病例上传成功后,手动点击"单病种质量控制指标系统"页面中的"上传",方可进行下一病例提交.


2.结果

本院4位骨科医生分别采取上述2种方式上传100例病例所需时间并重复3次的实验结果如下表2,采用t检验,P<0.05差异具有统计学意义.

3.结论

优化上报工作流程及VBA编程的应用极大提高病例上报工作效率约85% .由于目前卫生部"单病种质量控制指标系统"暂无批量上传病例的接口开放,借助Excel的VBA编程方法实现病例上传具有灵活、实用性的特点,可保质保量实现病例的快速上传,且成本低廉,适宜在各级医疗单位推广.