2016-03-01 4 views
1

Я вхожу в каталог папок и просматриваю папки, чтобы получить конкретные данные каждый раз, когда я нахожу конкретный файл.Проверьте, существует ли файл с использованием VBA или Excel без «DIR»

Если я открою файл, который я ищу в папке, в которой он отсутствует, я получаю ошибку отладки. Поэтому я должен проверить каталог, чтобы узнать, есть ли файл, и не пытаться его открыть, если это не так (это нормально, не все папки имеют файл темы).

Функция DIR - это любимая функция проверки присутствия файла, но поскольку я использую функцию DIR для перехода по папкам, мое тестирование показало, что я не могу использовать DIR для проверки определенного файла в в середине моего кода, потому что VBA запутывается, когда я был в шаге по папкам.

Как я могу проверить наличие известного имени файла без использования DIR? Я пробовал функцию я нашел:

Функция FileExists (FullFileName As String) As Boolean FileExists = VBA.Len (VBA.Dir (FullFileName))> 0 End Function

К сожалению, я не понял, как на самом деле написать это в СУБ, который я создаю. Образец, который я нашел (и другие подобные), но обычно не уточняет, что необходимо для начинающего новичка. В этом случае не знаю, что будет в LEN и DIR, и почему fullfilename понадобится в том, что выглядит как оператор DIM (из-за As Boolean). Я также обнаружил, что если я попытаюсь поместить эту функцию в свою подпрограмму, VBA просто не доволен.

Что я могу попробовать, это сработает? Мне просто нужен оператор IF вокруг функции, которая скажет мне, существует ли файл или нет.

+0

До тех пор, пока вы не нужно работать на Mac вы можете использовать Scripting.FileSystemObject https://msdn.microsoft.com/en-us/library/x23stk5t(v=vs. 84) .aspx –

+0

Тим, спасибо за вашу рекомендацию. Я вытащил то, что было, но не получил ожидаемых результатов, поэтому я немного улучшил скрипт, чтобы попытаться помочь: Sub FileExistence() Dim fso Dim Folder As String Папка = Dir ("c: \ users \" , vbDirectory) MsgBox Папка Set FSO = CreateObject ("Scripting.FileSystemObject") Если (fso.FileExists ("C: \ Users \")) Тогда MsgBox "" существует Else MsgBox "не существует". Конец Если Конец Sub – Excelling

+0

К сожалению, это новое. Тим, спасибо за ссылку, но это не дает мне ожидаемых результатов.Я добавил DIR & MSGBOX подтвердить каталог существует: Sub Test_File_Existence() Dim FSO Dim Folder As String Folder = Dir ("C: \ Users \", vbDirectory) MsgBox Папка Set FSO = CreateObject ("Scripting .FileSystemObject ") Если (fso.FileExists (" c: \ users \ ")) Затем MsgBox" существует. " Else MsgBox "не существует". End If End Sub У меня разные результаты. DIR дает точку, первую директорию в пользователях; IF имеет msgbox сказать, что файл не существует. FSO терпит неудачу. ??? – Excelling

ответ

0

Скажем, мы ищем файл, содержащий «счастье» в папке C: \ TestFolder или подпапку этой папки. Мы хотим знать:

  • имя файла
  • его местонахождение

Мы также хотим быть информированными, если «счастье» не может быть найден. Рассмотрим:

Dim FileIsThere As Boolean 

Sub MAIN() 

    Dim FileSystem As Object 
    Dim TopFolder As String 

    TopFolder = "C:\TestFolder" 
    FileIsThere = False 
    Set FileSystem = CreateObject("Scripting.FileSystemObject") 

    Process FileSystem.GetFolder(TopFolder) 

    If Not FileIsThere Then 
     MsgBox "happiness cannot be obtained, settle for the absence of misery" 
    End If 
End Sub 

Sub Process(Folder) 
    Dim SubFolder 
    For Each SubFolder In Folder.SubFolders 
     Process SubFolder 
    Next 

    Dim File 
    For Each File In Folder.Files 
     If InStr(1, File.Path, "happiness") > 0 Then 
      tpath = Left(File.Path, Len(File.Path) - Len(File.Name)) 
      MsgBox tpath & " contains " & File.Name 
      FileIsThere = True 
     End If 
    Next 
End Sub