2012-04-06 119 views
11

嗨我試圖列出Excel工作簿所在的子目錄中的所有文件。出於某種原因,代碼無法在Dir函數之外執行。任何人都可以請指教?謝謝!Dir()函數在Mac Excel 2011中不起作用VBA

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 
+0

什麼是「不能執行「的意思是什麼?是否有錯誤訊息?什麼是執行停止時'strPath'的內容停止? – 2012-04-06 16:08:04

回答

18

吉安娜,你不能使用DIR一樣,在VBA,EXCEL 2011年。我的意思是不支持通配符。你必須爲此使用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功能

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

編輯:

如果鏈接永遠死亡,我懷疑,這裏是一個摘錄。

MACID功能

用於在Macintosh到一個4個字符的常數,其可以通過風向,殺死,殼牌和則AppActivate使用的值轉換。

語法

MACID(常數)

所需恆定參數包括用於指定資源類型的4個字符,文件類型,應用程序簽名,或蘋果事件,例如,TEXT,OBIN ,Excel文件的「XLS5」(Excel 97的「XLS8」),Microsoft Word的「W6BN」(Word 97的「W8BN」)等等。

備註

MACID用於與導演和殺死指定Macintosh文件類型。由於Macintosh不支持*和?作爲通配符,您可以使用四字符常量來標識文件組。例如,下面的語句從當前文件夾返回TEXT類型的文件:

風向(「SomePath」,MACID(「文本」))

MACID用於與殼牌和使用AppActivate來指定使用的應用程序的應用程序的獨特的簽名。

HTH

+1

+1簡單極好 – 2012-04-07 10:38:32

+1

這裏需要注意的一個問題是,返回的文件路徑被縮短到適合31個字符的限制(來自OS X之前的HFS文件系統的文件名限制)。縮短功能會保留文件擴展名,但會改變之前的字符,類似於Windows上文件的短路徑名稱。 – 2012-10-25 14:26:18

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 
0

對於上面的答案,它爲我工作,當我拿出在MACID 「文本」:

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 
相關問題