Dir() 函数在 Mac Excel 2011 VBA 中不起作用
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10045474/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Dir() function not working in Mac Excel 2011 VBA
提问by AG10
Hi I am trying to list all the files in a subdirectory of where the Excel workbook is residing in. For some reason, the code cannot execute beyond the Dir function. Can anyone please advise? Thank you!
嗨,我正在尝试列出 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
回答by Siddharth Rout
Gianna, you cannot use DIR
like that in VBA-EXCEL 2011. I mean the wildcards are not supported. You have to use MACID for this purpose.
Gianna,你不能DIR
在 VBA-EXCEL 2011 中那样使用。我的意思是不支持通配符。为此,您必须使用 MACID。
See this code sample (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
See this link for more details on MACID
有关 MACID 的更多详细信息,请参阅此链接
Topic: MacID Function
主题:MacID 函数
Link: http://office.microsoft.com/en-us/access-help/macid-function-HA001228879.aspx
链接:http: //office.microsoft.com/en-us/access-help/macid-function-HA001228879.aspx
EDIT:
编辑:
In case that link ever dies which I doubt, here is an extract.
如果我怀疑该链接消失了,这里是一个摘录。
MacID Function
Used on the Macintosh to convert a 4-character constant to a value that may be used by Dir, Kill, Shell, and AppActivate.
Syntax
MacID(constant)
The required constant argument consists of 4 characters used to specify a resource type, file type, application signature, or Apple Event, for example, TEXT, OBIN, "XLS5" for Excel files ("XLS8" for Excel 97), Microsoft Word uses "W6BN" ("W8BN" for Word 97), and so on.
Remarks
MacID is used with Dir and Kill to specify a Macintosh file type. Since the Macintosh does not support * and ? as wildcards, you can use a four-character constant instead to identify groups of files. For example, the following statement returns TEXT type files from the current folder:
Dir("SomePath", MacID("TEXT"))
MacID is used with Shell and AppActivate to specify an application using the application's unique signature.
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(“文本”))
MacID 与 Shell 和 AppActivate 一起使用,以使用应用程序的唯一签名来指定应用程序。
HTH
HTH
回答by user1934049
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
回答by Clock247
For the answer above, it worked for me when I took out the "TEXT" in MacID:
对于上面的答案,当我在 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