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

13

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

<code>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
</code>
То, что "не может выполнить" значит точно? Есть ли сообщение об ошибке? Что именно является содержаниемstrPath когда выполнение останавливается, останавливается? Jean-François Corbett

Ваш Ответ

3   ответа
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

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

НТН

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

Похожие вопросы