2015-06-19 60 views
0

我是VBscript的新手,我正在编写一个简单的脚本,用于在给定文件夹位置中的几千个csv文件中更改几个单元格。我有一个很好的开始,似乎所有的工作,除了当我运行脚本(从一个只调用脚本的.bat文件),它只改变和移动3-8个文件。它改变的文件数量是随机的,不像它总是改变5个文件或其他东西。我不确定代码中出现了什么问题,为什么它不会编辑和移动每个文件,并且每次只能执行一次,这是我迄今为止所提供的任何帮助提前感谢:VB脚本不会遍历给定文件夹中的每个文件

Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject") 
Set colFiles = ObjFSO.GetFolder("C:\Users\xxx\BadCSVs").Files 
Set xl = CreateObject("Excel.Application") 

For Each objFile in colFiles 
    If LCase(objFSO.GetExtensionName(objFile)) = "csv" Then 
    Set wb = xl.Workbooks.Open(objFile) 
    Set sht = xl.ActiveSheet 


     If(sht.Cells(1,11) <> "") Then 
     sht.Cells(1,8) = sht.Cells(1,8) & sht.Cells(1,9) 
     sht.Cells(1,9) = sht.Cells(1,10) 
     sht.Cells(1,10) = sht.Cells(1,11) 
     sht.Cells(1,11) = Null 

     wb.Save 
     wb.Close True 

     Else 
     'if file is opened up and has only 10 columns of data, then it makes no changes, then closes it. 
     wb.Close 
     End If 
    End If 

Next 
xl.Quit 
+2

VB.NET IsNot vba并且也VB.NET IsNot VBScript。 – Plutonix

+1

On Error Resume Next可能会掩盖可能解释您的不一致行为的错误。 –

回答

3

你的邪恶全球

On Error Resume Next 

隐藏错误。禁用/删除它并再次测试。

wb.Close SaveChanges=True 

经过比较的SaveChanges(未定义/空)与布尔文字的布尔结果。也许你复制了VBA代码

wb.Close SaveChanges:=True 

(标记冒号)在VBScript中不合法吗?

而且

Set xl = CreateObject("Excel.Application") 

应与

xl.Quit 

如果调用Excel的环配对,有终止它。我会尝试从循环中启动/退出Excel,但您应该仔细测试该方法。

+0

所以我做了一些小改动,如下所示。 (上面重新编辑了更改)我把这一行设置为For循环之外的xl = CreateObject(“Excel.Application”),并将“wb.Close SaveChanges = True”更改为“wb.Close True”这种工作方式。 ...它通过并更改了更多文件(接近50),但仍然不是文件夹中的所有文件 –