VBA 学习笔记 (任务完成,准备告一段落)

来源:互联网 发布:工业机器人编程 编辑:程序博客网 时间:2024/06/03 20:14

在辞去第一份工作之前,顺利的完成了自己做的一个优化项目,目测当设置条目到达30条的时候,可以节省时间1~3个小时。该项目用于在Mainfrime上通过写数据库完成对参数设置。每个客户的每一条参数长度为5000,其中有用到一些十六进制的参数 。

1. 将参数复制到excel

2. 去除每一个参数多余的空格,并做简单的合法性检查,如果不合法则把不合法的参数所在单元格颜色背景颜色改为红色。

1>. trim(String) '去除多余空格2>. cells(i,j).interior.colorindex =3 '红色

3. 把需要改变的参数做适当变动,如SQL控制语句,如果该参数为delete,则应该变为DVGVTRCD;如果该参数为add,则应该变为IVGVTRCD;如果该参数为change,则应该变为UVGVTRCD; 另一个重要的变动就是设置,十六进制的参数,譬如一个数在ultra edit的十六进制模式下为09,这时要用到chrb这个函数。用法如下(可以在excel中按F1查询):

ChrB 函数作用于包含在 String 中的字节数据。ChrB总是返回一个单字节,而不是返回一个字符,一个字符可能是一个或两个字节。ChrW 函数返回包含UnicodeString,若在不支持 Unicode 的平台上,则其功能与Chr 函数相同。

Option Explicit '加上这句之后,变量必须声明后才能使用。可以在设置每次新建一个模块就加上这一句。Sub test1()    Dim temp As Variant    Dim strSQL As String    strSQL = "Delete"
    'LCase将字符串编程小写,这样便于比较    temp = Switch(LCase(strSQL) = "delete", "DVGVTRCD", _                LCase(strSQL) = "add", "AVGVTRCD", _                LCase(strSQL) = "change", "UVGVTRCD")    If (IsNull(temp)) Then  ‘如果strSQL不是delete,add或者change,则返回结果应该为null        Cells(1, 1).Interior.ColorIndex = 3 '将第一个单元格的背景色变为红色    Else:            Sheet1.Cells(1, 1) = temp ‘否则将值赋给第一个单元格    End IfEnd Sub

4. 5000长度的字符串中间有参数,开始考虑过用replace这个函数以及worksheetfunction的replace,发现在处理十六进制的chrb(0)的时候都有问题,长度不能正确计算,后来只能考虑笨方法,将参数和空格一个一个的连接起来,幸好中间的空格有很多,要不然真的会死人的。关于为什么replace不能正确工作,我想是因为在VBA中,单元格的格式为Bstr,是以null结尾的,即以chrb(0)结尾的。

5. 输出结果,由于单元格不能正确处理chrb(0),所以考虑直接输出到txt。

Option ExplicitSub test2()    Dim path As String    Dim filename As String    Dim strTest As String    path = ThisWorkbook.path + "\"  '获取当前excel的位置    ChDir (path)'改变输出文件的默认目录,否则,将输出到windows默认的文档位置    filename = "123.txt"    strTest = "test"    Open filename For Binary As #1 '以Binary的方式打开,因为有一些二进制的字符。 如果该文件不存在,则会直接创建一个这样的文件。        Put #1, , strTest'将字符输出到文件    Close #1End Sub

6. 项目后续的过程无关vba


0 0
原创粉丝点击