13

您好我正在尝试列出 Excel 工作簿所在的子目录中的所有文件。由于某种原因,代码无法在 Dir 函数之外执行。有人可以请教吗?谢谢!

Sub ListFiles()

    ActiveSheet.Name = "temp"

    Dim MyDir As String
    'Declare the variables
    Dim strPath As String
    Dim strFile As String
    Dim r As Long

    MyDir = ActiveWorkbook.Path 'current path where workbook is
    strPath = MyDir & ":Current:" 'files within "Current" folder subdir, I am using Mac Excel 2011

    'Insert the headers in Columns A, B, and C
    Cells(1, "A").Value = "FileName"
    Cells(1, "B").Value = "Size"
    Cells(1, "C").Value = "Date/Time"

    'Find the next available row
    r = Cells(Rows.Count, "A").End(xlUp).Row + 1

    'Get the first file from the folder
            'Note: macro stops working here
    strFile = Dir(strPath & "*.csv", vbNormal)

    'Loop through each file in the folder
    Do While Len(strFile) > 0

        'List the name, size, and date/time of the current file
        Cells(r, 1).Value = strFile
        Cells(r, 2).Value = FileLen(strPath & strFile)
        Cells(r, 3).Value = FileDateTime(strPath & strFile)

        'Determine the next row
        r = r + 1

        'Get the next file from the folder
        strFile = Dir

    Loop

    'Change the width of the columns to achieve the best fit
    Columns.AutoFit

End Sub
4

3 回答 3

19

Gianna,你不能DIR在 VBA-EXCEL 2011 中这样使用。我的意思是不支持通配符。为此,您必须使用 MACID。

请参阅此代码示例(TRIED AND TESTED

Sub Sample()
    MyDir = ActiveWorkbook.Path
    strPath = MyDir & ":"

    strFile = Dir(strPath, MacID("TEXT"))

    'Loop through each file in the folder
    Do While Len(strFile) > 0
        If Right(strFile, 3) = "csv" Then
            Debug.Print strFile
        End If

        strFile = Dir    
    Loop
End Sub

有关 MACID 的更多详细信息,请参阅此链接

主题:MacID 函数

链接: http: //office.microsoft.com/en-us/access-help/macid-function-HA001228879.aspx

编辑:

万一我怀疑该链接消失了,这里有一个摘录。

MacID 函数

在 Macintosh 上用于将 4 个字符的常量转换为 Dir、Kill、Shell 和 AppActivate 可以使用的值。

句法

MacID(常数)

必需的常量参数由 4 个字符组成,用于指定资源类型、文件类型、应用程序签名或 Apple 事件,例如,TEXT、OBIN、Excel 文件的“XLS5”(Excel 97 的“XLS8”),Microsoft Word 使用“W6BN”(Word 97 为“W8BN”)等等。

评论

MacID 与 Dir 和 Kill 一起使用以指定 Macintosh 文件类型。由于 Macintosh 不支持 * 和 ? 作为通配符,您可以使用四字符常量来标识文件组。例如,以下语句从当前文件夹返回 TEXT 类型的文件:

目录(“SomePath”,MacID(“TEXT”))

MacID 与 Shell 和 AppActivate 一起使用,以使用应用程序的唯一签名指定应用程序。

高温高压

于 2012-04-06T16:08:02.080 回答
0
If Dir(outputFileName) <> "" Then
Dim ans
ans = MsgBox("File already exists.Do you wish to continue(the previous file will be    deleted)?", vbYesNo)
If ans = vbNo Then
Exit Sub
Else
Kill outputFileName
End If
End If

For listitem = 0 To List6.ListCount() - 1
于 2013-02-10T20:22:29.273 回答
0

对于上面的答案,当我在 MacID 中取出“TEXT”时,它对我有用:

Sub LoopThruFiles()

    Dim mydir As String
    Dim foldercount As Integer
    Dim Subjectnum As String
    Dim strpath As String
    Dim strfile As String

    ChDir "HD:Main Folder:"
    mydir = "HD:Main Folder:"
    SecondaryFolder = "Folder 01:"
    strpath = mydir & SecondaryFolder

    strfile = Dir(strpath)

    'Loop through each file in the folder
    Do While Len(strfile) > 0
     If Right(strfile, 3) = "cef" Then
        MsgBox (strfile)
        End If
        strfile = Dir
    Loop
End Sub
于 2016-06-26T20:19:18.283 回答