有一些项目中,偏好用excel进行数据收集和品质管理等。
针对每个机能就会有一套管理文件。制造review票,测试式样书,测试式样的review票,测试结果的review票等等。
用不了多久就会有很多文件。项目中期,有可能随时对这些票据进行统计,调查。但是一个一个打开文件未免过于麻烦。怎么办。很多时候我们只是查看每个文件的固定位置的内容。针对这类问题,我觉得有必要设计一个VBA工具来辅助我们轻松愉快地完成。
现在我们来一起设计一下。
上面提到的每类文档都是有固定模版。比如表头信息,一共有十项,每一项的位置大小都是固定的。这样我们在做工具的时候,才能通过相对位置找到我们想要找的内容。
第一步,就是获取对象文件的路径名字。
用户需要给我们指定一个文件夹。对象文件就在这个文件夹中,有可能是在子文件夹中。我们需要把这个文件夹下面所有的文件都列举出来。然后按照文件名字的特定,后缀名等特定筛选一遍。过滤掉我们不想要的文件。然后把我们要找的文件的全路径名字放到一个数组中。
dim cfolder as folder
dim sfolder as folder
dim fs as New FileSystemObject
获取指定路径的下的文件
Set cfolder = fs.getFolder(path)
for each itemFile in cfolder.Files 遍历当前文件夹下面的所有文件
有子文件夹的时候怎么办
for each itemFolder in cfolder.SubFolders 遍历所有子文件夹,然后递归。
第二步,开始遍历这个数组,按照路径打开每个文件。
第三步,根据文件模版结构我们设计一个表格模版,上面指定好sheet名,单元格名,行偏移量,列偏移量,比如我想取Asheet的B单元格后面的内容。模版设计成 A,B,0,1。
打开的文件中直接定位我们的目标sheet页中。
workbook对象.sheets("A")
从第一个行开始逐行查找和B单元格的内容找B单元格的地址。然后按照偏移量找到目标单元格,获取我们想要的内容。
Set Btemp = worksheet对象.cells.Find(what:=目标字符串,LookIn:=从哪个单元格开始,lookat:=xlWhole)
返回值 = Btemp.offset(0,1).value
第四步,按照第三步的模版读取文件内容作为一个条数据输出都指定位置。
第二步和第四步很简单,大家自己发挥这里就不过多赘述了。
到此这个小工具就设计完成了,是不是很简单。
一个成功的项目,一定有很多优秀的小工具辅助。反过来未必成立。
软件工程的很多工作都可以工具化。很多时候我们是用代码写代码,用代码测试代码。