2012-04-06 13 views
11

Witam Próbuję wyświetlić listę wszystkich plików w podkatalogu, w którym znajduje się skoroszyt programu Excel. Z jakiegoś powodu kod nie może być wykonywany poza funkcją Dir. Czy ktoś może doradzić? Dziękuję Ci!Funkcja Dir() nie działa w programie 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

Co to znaczy „nie mogę wykonać "znaczy dokładnie? Czy jest komunikat o błędzie? Czym dokładnie jest zawartość 'strPath' przy zatrzymaniu wykonywania? –

Odpowiedz

18

Gianna, nie można używać DIR takiego w VBA-Excel 2011. To znaczy, że symbole wieloznaczne nie są obsługiwane. Do tego celu musisz użyć MACID.

Zobacz ten przykładowy kod (SPRAWDZONA)

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 

Zobacz ten link aby uzyskać więcej informacji na MACID

Wątek: MacID Funkcja

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

EDYTOWANIE:

W przypadku, że link kiedykolwiek umiera, co wątpię, oto wyciąg.

MacID Funkcja

używany na komputerach Macintosh do konwertowania 4-charakter stały do ​​wartości, która może być wykorzystana przez Dyrektywę, zabić, Shell i AppActivate.

Składnia

MacID (stała)

Wymagany stały argument, składa się z 4 znaków używanych w celu określenia typu zasobu, typ pliku, podpis aplikacja lub Apple Event, na przykład, tekst, Obin , "XLS5" dla plików Excel ("XLS8" dla programu Excel 97), program Microsoft Word używa "W6BN" ("W8BN" dla programu Word 97) i tak dalej.

Uwagi

MacID jest używany z Dir i zabijać, aby określić typ pliku Macintosh. Ponieważ Macintosh nie obsługuje * i? jako symbole wieloznaczne można użyć stałej czteroznakowej, aby zidentyfikować grupy plików. Na przykład, następująca instrukcja zwraca plików Wpisz tekst z bieżącego folderu:

Dir („SomePath” MacID („TEXT”))

MacID jest używany z Shell i AppActivate określić aplikacji przy użyciu aplikacji na unikalny podpis.

HTH

+1

+1 po prostu znakomity –

+1

Problem, o którym należy pamiętać, polega na tym, że zwrócone ścieżki plików są skracane, aby pasowały do ​​limitu 31 znaków (limit nazwy pliku z systemu plików HFS przed systemem OS X). Funkcja skracania zachowuje rozszerzenie pliku, ale zmienia znaki przed nim, podobnie jak nazwy krótkich ścieżek dla plików w systemie 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

Dla odpowiedzi powyżej, pracował dla mnie, kiedy wyjął "tekst" w 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 
Powiązane problemy