13

Вопрос по vba, excel – Функция Dir () не работает в Mac Excel 2011 VBA

Здравствуйте, я пытаюсь перечислить все файлы в подкаталоге, где находится книга Excel. По какой-то причине код не может быть выполнен за пределами функции Dir. Кто-нибудь может пожалуйста посоветовать? Спасибо!

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
  • Здесь необходимо знать о том, что пути к возвращаемым файлам сокращены до предела в 31 символ (ограничение имени файла в файловой системе HFS до OS X). Функция сокращения сохраняет расширение файла, но изменяет символы перед ним, подобно коротким путям для файлов в Windows.

    от
  • То, что "не может выполнить" значит точно? Есть ли сообщение об ошибке? Что именно является содержаниемstrPath когда выполнение останавливается, останавливается?

    от Jean-François Corbett
  • 0

    Code:

    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

    Что касается ответа выше

    это сработало для меня, когда я вынул «TEXT». в 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
    

  • 19

    Джанна, вы не можете использовать

    DIR как в VBA-EXCEL 2011. Я имею в виду, что шаблоны не поддерживаются. Вы должны использовать MACID для этой цели.

    Смотрите этот пример кода (TRIED AND TESTED)

    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

    Topic: MacID Function

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

    EDIT:

    В случае, если эта ссылка когда-либо умирает, в чем я сомневаюсь, вот выдержка.

    MacID Function

    Used on the Macintosh to convert a 4-character constant to a value that may be used by Dir, Kill, Shell, and AppActivate.

    Syntax

    MacID(constant)

    The required constant argument consists of 4 characters used to specify a resource type, file type, application signature, or Apple Event, for example, TEXT, OBIN, "XLS5" for Excel files ("XLS8" for Excel 97), Microsoft Word uses "W6BN" ("W8BN" for Word 97), and so on.

    Remarks

    MacID is used with Dir and Kill to specify a Macintosh file type. Since the Macintosh does not support * and ? as wildcards, you can use a four-character constant instead to identify groups of files. For example, the following statement returns TEXT type files from the current folder:

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

    MacID is used with Shell and AppActivate to specify an application using the application's unique signature.

    НТН