- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
b = Mid(fn, i, 1) If b = " " Then
Exit Do End If i=i+1
Loop 批号 = Left(fn, i - 1) End Function Public Function 姓名(fn) As Variant
Dim SY(1 To 11) As Variant SY(1) = "连亦辰" SY(2) = "苏洋" SY(3) = "王凤祥" SY(4) = "徐霞" SY(5) = "王海峰" SY(6) = "李志明" SY(7) = "杨凤云" SY(8) = "幸国力" SY(9) = "高会艳" SY(10) = "孟嫔嫔" SY(11) = "王江敏" Dim iAs Integer i=1 Do While i< 12 temp = InStr(fn, SY(i))
1.2 环境需求
1.2.1 开发环境
VBA 实际上可以认为是 VB 的子集合,这样它的运行环境也就很好理解,就是 VB 的 运行的 IDE 环境都是基于 Basic。它们包含的对象以及对象的属性和方法都是相同的。两者
的不同在于它们的运行平台不同,相对来说 VB 的运行平台更广,VBA 则只是运行在 Excel 中,但也因此 VBA 可以利用 Excel 的数据处理功能,包括报表、数据统计、图形分析等。 对于开发人员来说很有必要认识清楚 VB 和 VBA 的区别,在此列出以下几条:1. 利用 VB 开发的 Windows 应用程序,它的代码部分最后必须是生成机器码,而 VBA 开发的代码并不 直接生成机器码,而是在产生 VB 的代码后就停止,其他工作就不在属于 VBA,这是 VBA 的宏语言所决定;2. 在独立性方面 VBA 明显不如 VB,实际上 VB 有自己的开发环境,而 VBA 必须依附于某个应用程序,Excel 就是 VBA 很好的“宿主”;3. VBA 虽然有运行平台 的限制,但这也是它的优势,可以利用平台已有的功能加强自己而且可以简化开发周期,这 是 VB 所不具有的。尽管有这样或那样的不同,但是由于 VB 和 VBA 在构架上是相同的所 以对开发者来说还是很简单的,而且在程序的移植方面也是比较简单的。[1]
VBA 在实验室数据处理中的设计及应用
摘要
随着现代工业的发展,计算机数据管理系统越来越受到企业重视。本程序开发平台是 Visual Basic for Applications(VBA),程序主要使用模块和窗体,在程序中加入了对标准样品 相对偏差和相对误差的计算,加入了对 X 荧光光谱仪半定量导出的大量文件进行顺序读取 并批量导出,对岩矿分析实验室日常处理的各种数据进行程序化的批量编辑和数据处理。该 VBA 程序集分别实现了 X 荧光光谱仪半定量导出数据的系统化处理,实验室标准样品的分 类统计及计算,实验室数据处理人员可以通过各程序对其对应的仪器导出的报告进行批量编 辑和统计,实现对各仪器导出数据的规范化处理,对实验室日常实验中分析的各标准样品数 据进行监督和趋势控制,可以摆脱传统手动处理大量数据的现状,使实验室的报告处理更加 规范和高效。此代码具有高度的可扩展性,易移植性和易维护性。
图 10 标准样品读取程序二级窗体
图 11 窗体文本框默认值设定
3.3 程序对文件名的分段识别
本程序使用函数对文件名的分段识别,达到对各参数记录的目的,见图 12。 代码如下: Public Function 批号(fn)
Dim a, b As Variant Dim iAs Integer i=1 Do While i< 10
b = Mid(a, i, 1) If b = "2" Then 时间 = Right(a, 11 - i)
Exit Do End If i=i+1 Loop End Function Public Function 元素(fn)
Dim a, b, n As Variant Dim iAs Integer i=9 n = Len(fn) Do While i< n
End If End If End With End If k=k+1 Loop
图 4 循环复制代码的实现
2.4 格式修改代码的设计
在复制完成之后需要调整格式,需要 将“10-6”改成“10-6”,并且将第 一列的宽度改变 为可以容纳 10 位数字的适当宽度,见图 5。
代码如下: Do While i<= 41 ws.Cells(1, i + 1) = ys(i)
关键词:数据处理,VBA,导出文件
第一章 系统分析
1.1 系统需求分析
1.1.1 X 荧光读取程序
由于 X 荧光光谱仪半定量测试样品后生成的数据为一个样品对应一个文件,在后期的 数据处理中,大量的文件不利于结果的上报,需要将每一个文件中的元素符号和对应测定值 粘贴到新的文件中,并按照相同顺序和对应元素粘贴,其缺点是工作量大、出错率高,非常 不利于结果的统计(图 1)。
计算相对误差及相对误差允许限 修改计算值与测定值格式 保 存并退出
第二章 X 荧光读取程序
2.1 X 荧光用户窗体设计
分析人员在打开程序后进入用户窗体界面,X 荧光光谱仪自动生成文件的前缀,在窗体 中需要输入本次测试样品的起止编号、标准样品编号以及需要创建文件的文件名。具体实现 界面如图 4.1 所示。
If temp <> 0 Then Exit Do
End If i=i+1
Loop 姓名 = SY(i) End Function Public Function 时间(fn)
Dim a, b, n, m As Variant Dim iAs Integer i=1 n = Len(fn) m = Left(fn, n - 4) a = Right(m, 10) Do While i< 11
本程序的功能是循环打开文件夹内的需求文件,从原文件中按照元素顺序复制其对应值, 粘贴到新表之后再读取下一个文件,最后处理格式,就可以在极短的时间内处理大量的数据。
图 1 X 荧光半定量测试结果文件
1.1.2 标样读取程序
实验室每测试一批样品,都需要在样品中插入 2-3 个标准样品,而标准样品的相对误差 或相对偏差都必须在允许限内,才可以确定样品的测定值与其真值的误差是否符合质量管理 文件的要求。实验室管理人员通过观察这些标准样品的波动性及其相对误差或相对偏差,可 以更加清晰和直观的了解分析人员的实验情况,可以更好的对实验方法和条件进行调整。
If Trim(VarFind) <> "" Then With ws2.Range("B:H") '查找范围 Set Rng = .Find(What:=VarFind, _
LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False)
b = Mid(fn, i, 2) If b = "Au" Then 元素 = b
Exit Do ElseIf b = "Ag" Then 元素 = b
Exit Do ElseIf b = "Cu" Then 元素 = b
Exit Do ElseIf b = "Pb" Then 元素 = b
Exit Do ElseIf b = "Zn" Then 元素 = b
1.2.2 运行环境需求
硬件环境: 处理器:Intel Pentium III 以上 内存:256 M 以上推荐 512M 或更高 硬盘空间:20 G
软件环境: 操作系统:Windows XP/Vista/7/8 操作软件:Excel 2003 以上
1.3 程序流程分析 1.3.1 X 荧光读取程序
图 2 X 荧光读取程序用户窗体
2.2 循环读取文件代码设计
在输入所有参数之后,程序将在固定目录下查找对应的文件名,并逐一打开。部分代码 如下 :
Do While Ct <= n If Dir("D:\Temp\A_" & q & " " &fileCt& ".xls") <> "" Then Set wb2 = Workbooks.Open("e:\Temp\A_" & q & " " & q2 & Ct & ".xls")
程序将打开 D:\Temp 目录下的起始文件,见图 3,4。
图 3 程序打开的文件目录
2.3 循环复制代码的设计
每打开一个文件,需要按照需要的顺序查找对应的元素,找到其所在的单元格地址,并 将表格中的元素和其测定值复制到新建的表中,见图 4。
代码如下: Do While k <= 41 '加循环 VarFind = ys(k) '要查找的值
由于各种实验仪器自动生成的结果报告格式不同,实验室管理人员在打开程序界面后, 需要选择当前实验对应的测试仪器(见图 9),再输入各标准样品的编号及其认定值(见图 10)。由于日常实验中所使用标准样品基本不变,所以在窗体中默认有最常 使用的几种标准 样品编号及其认定值(见图 11)。
图 9 标准样品读取一级窗体
输入文件起止序号、标准物质编号、新建文件名 新建Excel文件
按照固定顺序搜索元素所在单元格 复制元素符号和值至新表 顺序打开文件,循环复制 搜索标准物质位置 复制标准物质及值 修改标题栏格式 修改 测定值格式 转换完成
1.3.2 标准样品读取程序
选择实验仪器 输入标准物质编号及其认定值
判断元素 在打开的结果文件中搜索标准物质编号 复制标准物质编号及测定值至统计表中
If i<= 8 Then ws.Cells(2, i + 1) = "%"
Else
ws.Cells(2, i + 1).Select Selection.NumberFormatLocal = "@" ws.Cells(2, i + 1) = "10-6" ws.Cells(2, i + 1).Select
If Not Rng Is Nothing Then FindAddress = Rng.Address '查找到的单元格地址 row = ws(i).Cells(1, 17)
If row = 0 Then row = 1
With wsn.Range("B:B") '查找范围 Set Rng = .Find(What:=VarFind, _
LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False)
With ActiveCell.Characters(Start:=3, Length:=2).Font .Superscript = True
End With End If i=i+1 Loop Columns("A:A").EntireColumn.AutoFit
图 5 格式修改代码的实现
图 6 程序耗时
第三章 标准样品读取程序
3.1 标准样品记录文件设计
首先在管理人员的固定目录“D:\结果报告\”下建立标样统计文件,由于实验室需要测 试的有常量与微量两种类型的样品,所以建立两个表格进行记录,规范格式之后加密保存, 见图 7,8。
图 7 标样统计(常量)表格
图 8 标样统计(ot Rng Is Nothing Then
If k <= 9 Then ws.Cells(i + 2, k + 1) = Rng.Offset(0, 1).Value ElseIf k >= 10 Then ws.Cells(i + 2, k + 1) = (Rng.Offset(0, 1).Value) * 10000
Exit Do End If i=i+1 Loop End Function
图 12 程序对文件名的分段识别
3.4 循环查找并复制代码的设计
本程序使用查找代码查找结果文件中与标准样品编号相同的单元格,并复制其标准样品 编号及其认定值至标样统计表中,见图 13。
代码如下: If Trim(VarFind) <> "" Then