[英]Dir() function not working in Mac Excel 2011 VBA
您好,我正在尝试列出 Excel 工作簿所在的子目录中的所有文件。出于某种原因,代码无法在 Dir function 之外执行。有人可以建议吗? 谢谢!
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
Gianna,您不能像在 VBA-EXCEL 2011 中那样使用DIR
。我的意思是不支持通配符。 为此,您必须使用 MACID。
请参阅此代码示例(已尝试并经过测试)
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 Function
链接: http://office.microsoft.com/en-us/access-help/macid-function-HA001228879.aspx
编辑:
万一我怀疑该链接消失了,这里是摘录。
MacID Function
在 Macintosh 上用于将 4 字符常量转换为 Dir、Kill、Shell 和 AppActivate 可以使用的值。
句法
MacID(常量)
所需的常量参数由 4 个字符组成,用于指定资源类型、文件类型、应用程序签名或 Apple Event,例如,TEXT、OBIN、“XLS5”用于 Excel 文件(“XLS8”用于 Excel 97),Microsoft Word 使用“W6BN”(“W8BN”代表 Word 97),等等。
评论
MacID 与 Dir 和 Kill 一起使用以指定 Macintosh 文件类型。 由于 Macintosh 不支持 * 和? 作为通配符,您可以使用四字符常量来标识文件组。 例如,以下语句从当前文件夹返回 TEXT 类型的文件:
Dir("SomePath", MacID("TEXT"))
MacID 与 Shell 和 AppActivate 一起使用,以使用应用程序的唯一签名来指定应用程序。
HTH
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
对于上面的答案,当我在 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.