2012-04-06 21 views
11

Hola, estoy tratando de enumerar todos los archivos en un subdirectorio donde resida el libro de Excel. Por alguna razón, el código no puede ejecutarse más allá de la función Dir. ¿Alguien puede por favor asesorar? ¡Gracias!La función Dir() no funciona en 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

¿Qué significa "no puede ejecutar "significa exactamente? ¿Hay un mensaje de error? ¿Cuál es exactamente el contenido de 'strPath' cuando se detiene la ejecución? –

Respuesta

18

Gianna, no se puede utilizar como DIR que en VBA-EXCEL 2011. Me refiero a los comodines no son compatibles. Tienes que usar MACID para este propósito.

ver este ejemplo de código (probado y comprobado)

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 

Vea este enlace para más detalles sobre MACID

Tema: Función MacID

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

EDITAR:

En caso de que ese enlace muera alguna vez, lo cual dudo, aquí hay un extracto.

Función MacID

Se utiliza en el Macintosh para convertir una constante a un valor que puede ser utilizado por Dir, Kill, Shell y AppActivate de 4 caracteres.

Sintaxis

MacID (constante)

El argumento constante necesaria consta de 4 caracteres que se utilizan para especificar un tipo de recurso, tipo de archivo, firma de la aplicación, o Apple evento, por ejemplo, texto, OBIN , "XLS5" para archivos de Excel ("XLS8" para Excel 97), Microsoft Word usa "W6BN" ("W8BN" para Word 97), y así sucesivamente.

Observaciones

MacID se utiliza con Dir y de muertes para especificar un tipo de archivo Macintosh. Ya que Macintosh no es compatible con * y? como comodines, puede usar una constante de cuatro caracteres para identificar grupos de archivos. Por ejemplo, la siguiente instrucción devuelve el tipo archivos de texto de la carpeta actual:

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

MacID se utiliza con Shell y AppActivate para especificar una aplicación que utiliza de la aplicación firma única.

HTH

+1

+1 simplemente excelente –

+1

Un problema que hay que tener en cuenta aquí es que las rutas de los archivos devueltos se acortan para ajustarse a un límite de 31 caracteres (el límite de nombre de archivo del sistema de archivos HFS pre-OS X). La función de acortamiento mantiene la extensión del archivo pero altera los caracteres anteriores, de forma similar a los nombres de ruta cortos para archivos en 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

Para la respuesta anterior, que trabajó para mí cuando me llevó a cabo el "texto" en 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 
Cuestiones relacionadas