防止数据编辑、改动带来的不一致性,常常要将excel文件转成pdf文件再共享、发送给对方。有时excel文件还挺多,手头上保存实在是太慢了。就考虑用VBA批量转置。 掌握几个东西,就比较容易了:
1、首先要用Dir函数遍历文件夹中的excel文件。从excel2007开始就取消了FileSearch函数。只能Dir函数了。
2、Dir函数的目的就是遍历这个目录下的文件。第一次用Dir时,是要写参数的(就是在哪个目录下文件路径找什么格式的文件),比如说Dir("D:\Download\"&".xls"),就是遍历“D:\Download”下的xls文件。返回就是第一个xls文件的文件名(包含扩展名)。
3、后面还需要对找到的每个excel做编辑、转置。所以,我一般先定义2个数组,来保存找到的这些excel文件的文件名。其中一个数据保存的是包含扩展名的文件名,另一个数组就是保存不含扩展名的文件名。比如,dim arr(100) as string;dim noExtension(100) as string。每用dir找到一次,就把找到的文件名保存到这两个数组中。
4、Dir函数返回的都是带扩展名的文件名,怎样不要扩展名呢。我一般是用vba.replace来实现。比如,先用myFile=dir把dir返回的文件名保存到myFile中,接着,arr(count)=myFile保存完整文件名到数组中,再用noExtension(count)=vba.replace(myFile,".xls","")来保存不带.xls这个扩展名的文件名。
5、最后就是For语句来将这些找到的excel文件转为pdf文件。使用ExportAsFixedFormat函数。先用数组逐个打开这些excel文件,workbooks.open filename:="D:\Download\" &arr(i),接着就用ActiveWorkbook.ExportAsFixedFormat type:=xlTypePDF,filename:=myPath & noExtension(i) & ".pdf",quality:=xlQualityStandard,includeDocProperties:=false,ignorePrintAreas:=true,openAfterPublish:=false来转置pdf文件。这些参数就不解释了,不难的。
6、逐个打开,逐个关闭,免得搞得一堆窗口。ActiveWorkbook.close saveChanges:=false。