在VBscript中如何调用objFolder对象类型的第一个元素

时间:2014-10-03 14:30:32

标签: vbscript

这是我的第一篇文章,它与Vbscript有关。我是全新的,我能够将我在本网站上找到的两段代码混合在一起,以实现我想要的目标,但是我不理解代码的一部分,而且我不知道。如果可能的话,请帮忙。请看下面的代码,以及我的困惑。

基本上,此代码查看特定目录并提取该目录中文件的名称。然后我使用它在Excel中打开文件并将Excel转换为多个csv文件(excel中每个选项卡一个)。

我在我不明白的部分添加了****。基本上我想创建一个对象,它只是该目录中1文件的名称。显然在VBScript中看起来不可能,因为你要创建对象" objFolder.Files",这是对objFSO.Getfolder("目录)的直接调用。

我对此返回的项目类型感到困惑?它不是一个数组,但它有多个元素......我知道它有多个元素,因为除非在FOR循环内部分配该变量,否则我无法为其赋值。

NOte我分配了变量" Brandon"在for循环中,以获取文件的名称...我怎么能这样做?为什么我需要For循环呢?我想抓住第一个元素' objFolder.Files对象。

如果我的问题没有意义,请告诉我!

代码从此开始:

Dim strFilename  
Dim objFSO  
Set objFSO = CreateObject("scripting.filesystemobject")  
objStartFolder = "C:\test files\population file"


Set objFolder = objFSO.GetFolder(objStartFolder)


Set colFiles = objFolder.Files

****For Each objFile in colFiles
    brandon=objFile.Name

Next

strFilename = objStartFolder & "\" & brandon  

If objFSO.fileexists(strFilename) Then  
  Call Writefile(strFilename)  
Else  
  wscript.echo "no such file!"  
End If  
Set objFSO = Nothing  

Sub Writefile(ByVal strFilename)  
Dim objExcel  
Dim objWB  
Dim objws  

Set objExcel = CreateObject("Excel.Application")  
Set objWB = objExcel.Workbooks.Open(strFilename)  

For Each objws In objWB.Sheets  
  objws.Copy  
  objExcel.ActiveWorkbook.SaveAs "C:\test files\csv files\" & objws.Name & ".csv", 6  
  objExcel.ActiveWorkbook.Close False  
Next 

objWB.Close False  
objExcel.Quit  
Set objExcel = Nothing  
End Sub  

1 个答案:

答案 0 :(得分:2)

您可以使用GetFile()的{​​{1}}方法检索特定的File对象:

FileSystemObject

(顺便说一句,我已将您的Set objFile = objFSO.GetFile(strStartFolder & "\somefile.txt") WScript.Echo objFile.Path 更改为objStartFolder。它毕竟只是一个字符串,而不是对象引用。)

当您在Files对象上使用Folder属性时,就像您在示例中所做的那样,您将返回strStartFolder集合对象。如果你想迭代文件夹中的所有文件,这很有用。

如果您知道文件夹中有单个文件,但不知道其名称,那么您仍然需要迭代File集合。虽然VBScript集合提供Files属性,但它不允许使用整数索引。换句话说,你不能这样做:

Item()

您需要使用Set objFile = objFSO.GetFolder(strStartFolder).Files.Item(0) 循环,然后在第一次迭代后退出。

For Each ... In ...