Вернуть, если файл существует VBA Mac Office 2011 - PullRequest
4 голосов
/ 10 мая 2011

Я пытаюсь проверить, существует ли файл с VBA на Mac Office 2011.

Мой макрос работает с Office 2004, но не работает с 2011.

Яиспользуя функцию Dir.Если функция ничего не возвращает, это означает, что файл не существует.Но в Office 2011 функция возвращает код ошибки 76, когда файл не существует.

Ответы [ 3 ]

5 голосов
/ 12 мая 2011

Вы можете просто создать свою собственную функцию, которая обрабатывает ошибку.Например, что-то вроде этого:

Function FileExists(ByVal AFileName As String) As Boolean
    On Error GoTo Catch

    FileSystem.FileLen AFileName

    FileExists = True

    GoTo Finally

    Catch:
        FileExists = False
    Finally:
End Function

Sub Test()
  If FileExists("Macintosh HD:Library:User Pictures:Flowers:Flower.tif") Then
    MsgBox "File exists"
  Else
    MsgBox "File doesn't exists"
  End If
End Sub
4 голосов
/ 11 ноября 2011

Решение в ответе 1 должно работать. Но произойдет сбой всякий раз, когда вы столкнетесь с проблемой усеченного имени файла, которая преследует Mac Excel 2011 - даже с установленным пакетом обновления 1 (SP1).

Основная проблема описана на Microsoft http://answers.microsoft.com/en-us/mac/forum/macoffice2011-macexcel/help-xl-2011s-dir-function-truncates-filename/e72fbf5d-749c-4a55-a77c-e2def6db24d9?msgId=644b9f20-251b-46fe-8df3-f5a28a1c37f6

и объект FileSystem подвержен той же болезни, что и собственная функция DIR VBA.

Другими словами, он возвращает то же самое усеченное имя файла, которое возвращает Dir, следовательно, вы не можете определить, существует ли файл с длинным именем, имя, которое фактически отображается пользователю в списке в Finder, с использованием VBA. за Excel 2011 SP1, не прибегая к AppleScripting!

0 голосов
/ 07 августа 2014

Лучший ответ на сайте MSFT: http://msdn.microsoft.com/en-us/library/office/jj614412(v=office.14).aspx

Например:

Sub TestFile()
'First argument, 1 = file and 2 = folder.
'Note: This macro uses the FileOrFolderExistsOnMac function.
    If FileOrFolderExistsOnMac(1, "Macintosh HD:Users:<user name>:Documents:YourFileName.xlsx") = True Then
        MsgBox "File exists."
    Else
        MsgBox "File does not exist."
    End If
End Sub

Sub TestFolder()
'First argument, 1 = file and 2 = folder.
'Note: This macro uses the FileOrFolderExistsOnMac function.
    If FileOrFolderExistsOnMac(2, "Macintosh HD:Users:<user name>:Documents") = True Then
        MsgBox "Folder exists."
    Else
        MsgBox "Folder does not exist."
    End If
End Sub

Function FileOrFolderExistsOnMac(FileOrFolder As Long, FileOrFolderstr As String) As Boolean
'By Ron de Bruin
'30-July-2012
'Function to test whether a file or folder exist on a Mac.
'Uses AppleScript to avoid the problem with long file names.
    Dim ScriptToCheckFileFolder As String
    ScriptToCheckFileFolder = "tell application " & Chr(34) & "Finder" & Chr(34) & Chr(13)
    If FileOrFolder = 1 Then
        ScriptToCheckFileFolder = ScriptToCheckFileFolder & "exists file " & _
        Chr(34) & FileOrFolderstr & Chr(34) & Chr(13)
    Else
        ScriptToCheckFileFolder = ScriptToCheckFileFolder & "exists folder " & _
        Chr(34) & FileOrFolderstr & Chr(34) & Chr(13)
    End If
    ScriptToCheckFileFolder = ScriptToCheckFileFolder & "end tell" & Chr(13)
    FileOrFolderExistsOnMac = MacScript(ScriptToCheckFileFolder)
End Function 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...