Board logo

标题: [问题求助] [已解决]VBS从XLS固定单元格取值并重命名XLS文件名 [打印本页]

作者: marginal    时间: 2010-7-14 15:49     标题: [已解决]VBS从XLS固定单元格取值并重命名XLS文件名

在一个文件中,有一堆的XLS文件,其名字可以分为三类:一类为形如Bok_EP2_A400YY.xls;第二类为形如Inv_ep2_A400YY.xls;第三类为形如Pac_EP2_A400YY.xls。其实BOK,Inv,Pac三份文件为一整套文件。整套文件的判断标准看每一个文件名的第二个“_"后的字符,如果字符相同,就是同一套文件。比如Bok_EP2_A400YY.xls;Inv_ep2_A400YY.xls;Pac_EP2_A400YY.xls其第二个“_"后的字符都为A400YY,那么这三个文件就是同一套文件。

需要取Bok_EP2_A400YY.xls文件的D4单元格值,并将取得的值用来重命名整套文件XLS文件,比如Bok_EP2_A400YY.xls文件的D4单元格为5782042200,那么需要将Bok_EP2_A400YY.xls重命名为5782042200 bok.xls,Inv_ep2_A400YY.xls重命名为5782042200 inv.xls;Pac_EP2_A400YY.xls重命名为5782042200 pac.xls。因为这几个是一套文件。

请看附件。
代码在2楼
感谢qaz123654
作者: qaz123654    时间: 2010-7-14 17:05

保存为vbs在xls目录运行
  1. On Error Resume Next
  2. Dim fName
  3. Set objFS = CreateObject("Scripting.FileSystemObject")
  4. Set objFolder = objFS.GetFolder(".")
  5. readxls("Bok")
  6. readxls("")
  7. msgbox "完成"
  8. Set objFS = Nothing
  9. Set objFolder = Nothing
  10. Function readxls(str)
  11. For each f in objFolder.Files
  12. fName=split(f.Name,"_")
  13. If right(f.Name,4) = ".xls" and ubound(fName)=2 and fName(0) <> str then
  14. Set oExcel = CreateObject( "Excel.Application")
  15. oExcel.WorkBooks.Open(createobject("wscript.shell").currentdirectory&"\Bok_"&fName(1)&"_"&fName(2))
  16. fName1=oExcel.Cells(4,4).Value
  17. oExcel.Quit
  18. Set oExcel = Nothing
  19. f.Name= fName1&" "&fName(0)&".xls"
  20. End If
  21. Next
  22. End Function
复制代码

[ 本帖最后由 qaz123654 于 2010-7-15 12:40 编辑 ]
作者: marginal    时间: 2010-7-14 17:34

谢谢qaz123654
可能是我表达不清楚,在XLS文件夹中并不是每次都有Bok_EP2_A400YY.xls,事实上,路径应该跟VBS文件路径相同。即VBS放在什么文件夹下,就对该文件夹下的XLS文件其作用。
另外,我发现现在的代码只能更改Bok_EP2_A400YY这一套的名字,其它的文件都不能更改。
结果如下图:
作者: qaz123654    时间: 2010-7-14 17:48     标题: 回复 3楼 的帖子

是从以Bok_EP2_开头的文件中读取吗?
作者: marginal    时间: 2010-7-14 17:49

原帖由 qaz123654 于 2010-7-14 17:48 发表
是从以Bok_EP2_开头的文件中读取吗?

是的,读取所有Bok_EP2_文件中的D4单元格。
作者: marginal    时间: 2010-7-15 10:55

再次感谢qaz123654
第一次的代码我发现,每次运行只能更改1套文件。将更改好的文件剪切出去后,再运行VBS文件可以又改一套。也就是每次运行,只能更改一套文件而不能循环更改。

第二次的代码,运行后,只能更改BOK文件,其它配套的的INV,PAC不能更改,而且,好像只能改几个BOK文件,其它的BOK文件没有变化。第二次的运行结果;
作者: qaz123654    时间: 2010-7-15 12:46

代码更新到2楼,测试了下似乎可用,效率就差了点
作者: marginal    时间: 2010-7-15 14:32

原帖由 qaz123654 于 2010-7-15 12:46 发表
代码更新到2楼,测试了下似乎可用,效率就差了点


已经可以了,多谢qaz123654.




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2