2012-04-06 37 views
11

Xin chào Tôi đang cố liệt kê tất cả các tệp trong thư mục con nơi sổ làm việc Excel đang ở. Vì một số lý do, mã không thể thực thi vượt quá hàm Dir. Bất cứ ai có thể xin vui lòng tư vấn cho? Cảm ơn bạn!Chức năng Dir() không hoạt động trong 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

gì "không thể thực hiện "có nghĩa là chính xác? Có thông báo lỗi không? Nội dung chính xác của 'strPath' khi thực thi dừng lại là gì? –

Trả lời

18

Gianna, bạn không thể sử dụng DIR như thế trong VBA-EXCEL 2011. Tôi có nghĩa là ký tự đại diện không được hỗ trợ. Bạn phải sử dụng MACID cho mục đích này.

Xem mẫu mã này (thử và thử nghiệm)

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 

Xem liên kết này để biết thêm chi tiết về MACID

Chủ đề: Chức năng MacID

Liên kết: http://office.microsoft.com/en-us/access-help/macid-function-HA001228879.aspx

CHỈNH SỬA:

Trong trường hợp liên kết đó chết mà tôi nghi ngờ, dưới đây là trích xuất.

Chức năng MacID

sử dụng trên máy Macintosh để chuyển đổi 4 nhân vật liên tục đến một giá trị có thể được sử dụng bởi Dir, Kill, Shell, và AppActivate.

Cú pháp

MacID (không đổi)

Đối số liên tục yêu cầu bao gồm 4 ký tự dùng để xác định một loại tài nguyên, loại tập tin, chữ ký ứng dụng, hoặc Apple tổ chức sự kiện, ví dụ, TEXT, OBIN , "XLS5" cho tệp Excel ("XLS8" cho Excel 97), Microsoft Word sử dụng "W6BN" ("W8BN" cho Word 97), v.v.

chú

MacID được sử dụng với Dir và Kill để chỉ định một loại tập tin Macintosh. Vì Macintosh không hỗ trợ * và? dưới dạng ký tự đại diện, bạn có thể sử dụng hằng số gồm bốn ký tự thay vì xác định các nhóm tệp. Ví dụ, báo cáo kết quả sau trả file kiểu TEXT từ thư mục hiện hành:

Dir ("SomePath", MacID ("TEXT"))

MacID được sử dụng với Shell và AppActivate để xác định một ứng dụng bằng cách sử dụng của ứng dụng chữ ký duy nhất.

HTH

+1

+1 chỉ đơn giản là tuyệt vời –

+1

Một vấn đề cần lưu ý ở đây là đường dẫn tệp trả về được rút ngắn để phù hợp với giới hạn 31 ký tự (giới hạn tên tệp từ hệ thống tệp HFS trước X OS). Chức năng rút ngắn giữ phần mở rộng tập tin nhưng thay đổi các ký tự trước nó, tương tự như tên đường dẫn ngắn cho các tập tin trên Windows. –

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

Đối với câu trả lời ở trên, nó làm việc cho tôi khi tôi lấy ra "TEXT" trong 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 
Các vấn đề liên quan