0

我正在尝试编写一个简单的脚本来查看文件夹,找到指定的文件,然后在单元格上吐出时间戳。这是我已经拥有的简单部分(使用字符串和对象)。

我遇到问题的部分是在一个包含 +1,000 个文件的文件夹中重复超过 400 个特定文件。所有文件都有不同的标签,但有些可能有相似之处(AB.xls、AC.xls、AD.xls;A1.xls、A2.xls 等)。我可以走很长的路,只需冲洗并重复将字符串名称更改为每个特定文件,但这将花费太长时间来编写。

是否有一个捷径来循环这个,或者我是否需要为文件名添加一个变量行以每次更改?

这是一个片段:

Sub Timecheck() 
    Dim oFS As Object 
    Dim strFilename As String 

    strFilename = "Where the file is located" 
    Set oFS = CreateObject("Scripting.FileSystemObject") 
    Sheets("tab").Activate
    ActiveSheet.Cells(3, 3).Value = oFS.GetFile(strFilename).Datelastmodified 
    Set oFS = Nothing
End Sub
4

2 回答 2

0

循环思考一个文件夹:

Sub timecheck()
Dim FSO As Object
Dim FLD As Object
Dim fil As Object
Dim i As Long
Dim strFolder As String
i = 1

strFolder = "C:\Your Folder Name"

'Create the filesystem object
Set FSO = CreateObject("Scripting.FileSystemObject")
'Get a reference to the folder you want to search
Set FLD = FSO.GetFolder(strFolder)

'loop through the folder and get the file names
For Each fil In FLD.Files
    Sheets("Sheet1").Cells(i, 1) = fil.Name ' Filename in column A
    Sheets("Sheet1").Cells(i, 2) = fil.datelastmodified ' Date in column B
    i = i + 1
Next
End Sub
于 2012-11-28T21:27:32.293 回答
0

如果文件的名称在另一张纸上,您需要创建另一个函数来遍历该单元格范围。

一旦你有了这个函数,让它调用这个函数:

Sub Timecheck(byval aCell as object,byval X as integer,Y as integer) 
    Dim oFS As Object 
    Dim strFilename As String 
    strFilename = aCell.Text 
    Set oFS = CreateObject("Scripting.FileSystemObject") 
    Sheets("tab").Activate
    ActiveSheet.Cells(X,Y).Value = oFS.GetFile(strFilename).Datelastmodified 
    Set oFS = Nothing
End Sub

其中 X 和 Y 是要放入数据的单元格的坐标。您可以通过传入从另一张表中获取的范围内的单元格来调用它。

或者,如果您不想遍历范围,则将每个文件名放在新工作表上的单个单元格中,并用不会出现在名称中的字符对其进行分隔。然后把它分解成文件名。

祝你好运。

编辑:

如果您想遍历单元格内分隔列表中的项目,那么一旦您在对象中拥有单元格文本:

http://msdn.microsoft.com/en-us/library/6x627e5f(v=vs.80).aspx

输入'filename1.xls^filename2.xls^filename3.xls'

一旦你有包含文件列表的单元格对象就调用

DoStuff(cellObejct, "^")

Public Sub DoStuff( byval aCell as object, byval specialChar as string)
    Dim ListOfNames as Variant
    Dim intIndex, xCell, yCell as integer

    ListOfNames = Split(aCell.Text,specialChar)

    xCell = 1
    yCell = 1

    For intIndex = LBound(ListOfNames) To UBound(ListOfNames) 
        TimeCheck(ListOfNames(intIndex),xCell,yCell)
        yCell = yCell + 1            
    Next intIndex
End Sub

    Sub Timecheck(byval fName as string,byval X as integer,Y as integer) 
        Dim oFS As Object 
        Set oFS = CreateObject("Scripting.FileSystemObject") 
        Sheets("tab").Activate
        ActiveSheet.Cells(X,Y).Value = oFS.GetFile(fName).Datelastmodified 
        Set oFS = Nothing
    End Sub
于 2012-11-28T21:28:26.773 回答