2012-04-06 9 views
11

Hallo Ich versuche, alle Dateien in einem Unterverzeichnis, wo die Excel-Arbeitsmappe befindet in auflisten. Aus irgendeinem Grund kann der Code nicht über die Funktion Dir ausgeführt werden. Kann jemand bitte beraten? Vielen Dank!Dir() -Funktion funktioniert nicht in 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

Was „kann nicht ausführen "bedeuten genau? Gibt es eine Fehlermeldung? Was genau ist der Inhalt von 'strPath', wenn die Ausführung stoppt? –

Antwort

18

Gianna, können Sie nicht DIR wie die Verwendung in VBA-EXCEL 2011 I die Platzhalter bedeuten, werden nicht unterstützt. Zu diesem Zweck müssen Sie MACID verwenden.

dieses Codebeispiel anzeigen (PRAXIS GETESTET)

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 

diesen Link finden Sie weitere Informationen zu MAC-ID

Thema: MacID Funktion

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

EDIT:

Falls Link jemals stirbt, was ich bezweifle, hier ist ein Auszug.

MacID Funktion

auf dem Macintosh verwendet, um eine 4-Zeichen-Konstante auf einen Wert zu konvertieren, die von Dir, Töten, Shell und AppActivate verwendet werden können.

Syntax

MacID (konstant)

Das erforderliche konstante Argument besteht aus 4 Zeichen verwendet, um einen Ressourcentyp, Dateityp, Anwendungs ​​Unterschrift angeben, oder Apple Ereignis, zum Beispiel Text, OBIN "XLS5" für Excel-Dateien ("XLS8" für Excel 97), Microsoft Word verwendet "W6BN" ("W8BN" für Word 97) und so weiter.

Bemerkungen

MacID mit Dir und Töten verwendet wird, einen Macintosh-Dateityp angeben. Da der Macintosh * und? Als Platzhalter können Sie stattdessen eine vierstellige Konstante verwenden, um Gruppen von Dateien zu identifizieren. Beispielsweise gibt die folgende Anweisung Typ TEXT-Dateien aus dem aktuellen Ordner:

Dir („SomePath“, MacID („TEXT“))

MacID mit Shell und AppActivate verwendet die eine Anwendung angeben mit der Anwendung einzigartige Unterschrift.

HTH

+1

+1 einfach hervorragend –

+1

Ein Problem, das hier zu beachten ist, ist, dass die zurückgegebenen Dateipfade gekürzt werden, um eine Grenze von 31 Zeichen zu erreichen (der Dateinamelimit aus dem HFS-Dateisystem vor OS X). Die Verkürzungsfunktion behält die Dateierweiterung bei, ändert aber die Zeichen davor, ähnlich wie bei den Kurznamen für Dateien unter 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

Für die Antwort oben, es funktionierte für mich, wenn ich die "TEXT" in MacID nahm:

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