Проверьте, существует ли файл с использованием VBA

Sub test() thesentence = InputBox("Type the filename with full extension", "Raw Data File") Range("A1").Value = thesentence If Dir("thesentence")  "" Then MsgBox "File exists." Else MsgBox "File doesn't exist." End If End Sub 

В этом случае, когда я выбираю текстовое значение из поля ввода, он не работает. Если, однако, удалите "the sentence" из If Dir() и замените его фактическим именем в коде, оно работает. Может ли кто-нибудь помочь?

Обратите внимание, что ваш код содержит Dir("thesentence") который должен быть Dir(thesentence) .

Измените свой код на этот

 Sub test() thesentence = InputBox("Type the filename with full extension", "Raw Data File") Range("A1").Value = thesentence If Dir(thesentence) <> "" Then MsgBox "File exists." Else MsgBox "File doesn't exist." End If End Sub 

Используйте объект Office FileDialog чтобы пользователь мог выбрать файл из файловой системы. Добавьте ссылку в свой проект VB или в редактор VBA в Microsoft Office Library и посмотрите в справке. Это намного лучше, чем люди вступают в полные пути.

Вот пример использования msoFileDialogFilePicker чтобы позволить пользователю выбирать несколько файлов. Вы также можете использовать msoFileDialogOpen .

 'Note: this is Excel VBA code Public Sub LogReader() Dim Pos As Long Dim Dialog As Office.FileDialog Set Dialog = Application.FileDialog(msoFileDialogFilePicker) With Dialog .AllowMultiSelect = True .ButtonName = "C&onvert" .Filters.Clear .Filters.Add "Log Files", "*.log", 1 .Title = "Convert Logs to Excel Files" .InitialFileName = "C:\InitialPath\" .InitialView = msoFileDialogViewList If .Show Then For Pos = 1 To .SelectedItems.Count LogRead .SelectedItems.Item(Pos) ' process each file Next End If End With End Sub 

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

Исправление для файловExists из @UberNubIsTrue:

 Function fileExists(s_directory As String, s_fileName As String) As Boolean Dim obj_fso As Object, obj_dir As Object, obj_file As Object Dim ret As Boolean Set obj_fso = CreateObject("Scripting.FileSystemObject") Set obj_dir = obj_fso.GetFolder(s_directory) ret = False For Each obj_file In obj_dir.Files If obj_fso.fileExists(s_directory & "\" & s_fileName) = True Then ret = True Exit For End If Next Set obj_fso = Nothing Set obj_dir = Nothing fileExists = ret End Function 

EDIT: сокращенная версия

 ' Check if a file exists Function fileExists(s_directory As String, s_fileName As String) As Boolean Dim obj_fso As Object Set obj_fso = CreateObject("Scripting.FileSystemObject") fileExists = obj_fso.fileExists(s_directory & "\" & s_fileName) End Function 

просто избавиться от этих речевых меток

 Sub test() Dim thesentence As String thesentence = InputBox("Type the filename with full extension", "Raw Data File") Range("A1").Value = thesentence If Dir(thesentence) <> "" Then MsgBox "File exists." Else MsgBox "File doesn't exist." End If End Sub 

Это мне нравится:

 Option Explicit Enum IsFileOpenStatus ExistsAndClosedOrReadOnly = 0 ExistsAndOpenSoBlocked = 1 NotExists = 2 End Enum Function IsFileReadOnlyOpen(FileName As String) As IsFileOpenStatus With New FileSystemObject If Not .FileExists(FileName) Then IsFileReadOnlyOpen = 2 ' NotExists = 2 Exit Function 'Or not - I don't know if you want to create the file or exit in that case. End If End With Dim iFilenum As Long Dim iErr As Long On Error Resume Next iFilenum = FreeFile() Open FileName For Input Lock Read As #iFilenum Close iFilenum iErr = Err On Error GoTo 0 Select Case iErr Case 0: IsFileReadOnlyOpen = 0 'ExistsAndClosedOrReadOnly = 0 Case 70: IsFileReadOnlyOpen = 1 'ExistsAndOpenSoBlocked = 1 Case Else: IsFileReadOnlyOpen = 1 'Error iErr End Select End Function 'IsFileReadOnlyOpen 
 Function FileExists(fullFileName As String) As Boolean FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0 End Function 

Работает очень хорошо, почти, на моем сайте. Если я назову его «пустой», Dir вернет « connection.odc » !! Было бы здорово, если бы вы, ребята, могли поделиться своим результатом.

Во всяком случае, мне это нравится:

 Function FileExists(fullFileName As String) As Boolean If fullFileName = "" Then FileExists = False Else FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0 End If End Function 

Я не уверен, что не так с вашим кодом, но я использую эту функцию, которую я нашел в Интернете (URL-адрес в комментариях) для проверки наличия файла:

 Private Function File_Exists(ByVal sPathName As String, Optional Directory As Boolean) As Boolean 'Code from internet: http://vbadud.blogspot.com/2007/04/vba-function-to-check-file-existence.html 'Returns True if the passed sPathName exist 'Otherwise returns False On Error Resume Next If sPathName <> "" Then If IsMissing(Directory) Or Directory = False Then File_Exists = (Dir$(sPathName) <> "") Else File_Exists = (Dir$(sPathName, vbDirectory) <> "") End If End If End Function 
 Function FileExists(fullFileName As String) As Boolean FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0 End Function 
  • Как я зацикливаю таблицу excel 2010, используя его имя и колонку?
  • Как получить цвет фона из Условного форматирования в Excel с помощью VBA
  • Найти похожие сообщения в Outlook 2010 с новым / всплывающим окном, как в 2007 году
  • Что делает ключевое слово Set в VBA?
  • Excel макрос, чтобы сохранить книгу на другом сеансе Excel
  • Почему MS Excel выходит из строя и закрывается в течение процедуры Worksheet_Change Sub?
  • Excel можно заполнить две ячейки одной if-формулой
  • Integer Vs Long Confusion
  • VBA Macro для сортировки и применения условного форматирования к диапазону ячеек с динамическим числом строк
  • Excel VBA - функция QueryTable AfterRefresh, которая не вызывается после завершения обновления
  • Как я могу записать переход от 0 до 1 в столбце Excel?
  • Interesting Posts

    Кто устанавливает тип содержимого ответа в Spring MVC (@ResponseBody)

    pageLoadTimeout в Selenium не работает

    Существуют ли какие-либо инструменты для периодической проверки наличия веб-сайта?

    AutoHotKey – как снова сфокусироваться на окне после выполнения некоторых действий

    Установка двух мониторов с одной или двумя видеокартами

    Итерация по интерфейсу

    Что такое горячая клавиша Excel для пересчета всей формулы в листе?

    Я попытался установить Ubuntu 10.04, и я получил это сообщение – любые идеи о том, что делать?

    Невозможно изменить настройки обновления Java в панели управления Windows 7

    Установка и сохранение настроек разрешения для дисплея, который не автоопределяется в KDE / Fedora 20

    Как заменить буквенные подстроки без учета регистра в Java

    Пользовательская команда Django и cron

    Есть ли команда linux, например mv, но с регулярным выражением?

    Как я могу отклонить предложения в EditText?

    Является ли argv доступным для записи?

    Давайте будем гением компьютера.