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
In this when i pickup the text value from the input box, it doesn’t work. If however, if remove "the sentence"
from If Dir()
and replace it with an actual name in the code, it works. Can somebody help?
asked Jul 20, 2012 at 6:25
Note your code contains Dir("thesentence")
which should be Dir(thesentence)
.
Change your code to this
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
answered Jul 20, 2012 at 6:31
CylianCylian
10.8k4 gold badges43 silver badges55 bronze badges
4
Use the Office FileDialog
object to have the user pick a file from the filesystem. Add a reference in your VB project or in the VBA editor to Microsoft Office Library
and look in the help. This is much better than having people enter full paths.
Here is an example using msoFileDialogFilePicker
to allow the user to choose multiple files. You could also use 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
There are lots of options, so you’ll need to see the full help files to understand all that is possible. You could start with Office 2007 FileDialog object (of course, you’ll need to find the correct help for the version you’re using).
answered Jul 20, 2012 at 7:19
ErikEErikE
48.4k23 gold badges150 silver badges194 bronze badges
1
Correction to fileExists from @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: shortened version
' 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
answered May 29, 2013 at 19:14
amackay11amackay11
7191 gold badge10 silver badges17 bronze badges
3
just get rid of those speech marks
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
This is the one I like:
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
answered Jul 21, 2012 at 13:52
whytheqwhytheq
34k64 gold badges170 silver badges265 bronze badges
4
Function FileExists(fullFileName As String) As Boolean
FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0
End Function
Works very well, almost, at my site. If I call it with «» the empty string, Dir returns «connection.odc«!! Would be great if you guys could share your result.
Anyway, I do like this:
Function FileExists(fullFileName As String) As Boolean
If fullFileName = "" Then
FileExists = False
Else
FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0
End If
End Function
answered Oct 22, 2015 at 11:12
1
Function FileExists(fullFileName As String) As Boolean
FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0
End Function
answered Jun 14, 2015 at 2:09
Ronnie RoystonRonnie Royston
16k6 gold badges74 silver badges88 bronze badges
0
I’m not certain what’s wrong with your code specifically, but I use this function I found online (URL in the comments) for checking if a file exists:
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
answered Jul 20, 2012 at 6:31
DanDan
44.9k17 gold badges88 silver badges157 bronze badges
2
Very old post, but since it helped me after I made some modifications, I thought I’d share. If you’re checking to see if a directory exists, you’ll want to add the vbDirectory argument to the Dir function, otherwise you’ll return 0
each time. (Edit: this was in response to Roy’s answer, but I accidentally made it a regular answer.)
Private Function FileExists(fullFileName As String) As Boolean
FileExists = Len(Dir(fullFileName, vbDirectory)) > 0
End Function
answered Dec 19, 2018 at 3:55
based on other answers here I’d like to share my one-liners that should work for dirs and files:
-
Len(Dir(path)) > 0 or Or Len(Dir(path, vbDirectory)) > 0 'version 1 - ... <> "" should be more inefficient generally
- (just
Len(Dir(path))
did not work for directories (Excel 2010 / Win7))
- (just
-
CreateObject("Scripting.FileSystemObject").FileExists(path) 'version 2 - could be faster sometimes, but only works for files (tested on Excel 2010/Win7)
as PathExists(path)
function:
Public Function PathExists(path As String) As Boolean
PathExists = Len(Dir(path)) > 0 Or Len(Dir(path, vbDirectory)) > 0
End Function
answered Aug 12, 2019 at 9:21
Andreas CovidiotAndreas Covidiot
4,1785 gold badges50 silver badges95 bronze badges
Вы можете использовать функцию Dir с параметром vbHidden
Visual Basic | ||
|
Это ДОБАВИТ выдачу скрытых файлов к обычным. То есть, если у вас есть файл IterPara.txt и на нем дополнительных атрибутов не стоит, он будет выдан. Если он скрытый — тоже выдан. А если на нем стоит, например, атрибут «системный» и не стоит «скрытый» — не будет. Ну и в случае, если такого файла нет.
Если же надо выдать сообщение тогда и только тогда, когда файл имеет атрибут «скрытый», лучше воспользоваться FSO. Тут перебор файлов в каталоге, но можно и отдельный проверять.
Visual Basic | ||
|
Return to VBA Code Examples
VBA allows you to check if a file or folder exists by using the Dir function.
Using the Dir Command to Check If a File Exists
As we mentioned in the introduction, the Dir function allows us to check if a selected file exists on the computer. Here is the code:
Sub CheckFileExists ()
Dim strFileName As String
Dim strFileExists As String
strFileName = "C:UsersNikolaDesktopVBA articlesTest File Exists.xlsx"
strFileExists = Dir(strFileName)
If strFileExists = "" Then
MsgBox "The selected file doesn't exist"
Else
MsgBox "The selected file exists"
End If
End Sub
We first assigned the file path to the variable strFileName. Then we use the Dir function to get the file name into the variable strFileExists. If the file exists in the directory, its name will be assigned to the string variable strFileExists. If it does not exist then strFileExists will remain blank. Finally, the message box appears informing us if the file exists or not.
Using the Dir Command to Check If a Folder Exists
Similarly to checking if a file exists, you can check if a folder exists. You just need to add one argument to the Dir command. Let’s look at the code:
Sub CheckFolderExists ()
Dim strFolderName As String
Dim strFolderExists As String
strFolderName = "C:UsersNikolaDesktopVBA articlesTest Folder"
strFolderExists = Dir(strFolderName, vbDirectory)
If strFolderExists = "" Then
MsgBox "The selected folder doesn't exist"
Else
MsgBox "The selected folder exists"
End If
End Sub
We first assigned the folder path to the variable strFolderName. Then we use the Dir function to get the file name into the variable strFileExists. In order to check a folder, we need to add the second argument to the function – vbDirecotry. If the folder exists in the directory, its name will be assigned to the variable strFolderExists. If not strFolderExists will remain blank.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!
TSM Пользователь Сообщений: 14 |
Может кто-то знает, как проверить существует файл или нет? Is This the World We Created? |
Sub Макрос1() |
|
TSM Пользователь Сообщений: 14 |
Спасибо, всё работает. Но столкнулся с проблемой, если сервер, на которм лежат фотографии отключен, в этом случае идёт длительная проверка, а потом ошибка. Можно ли также проверять наличие сервера и если он не найден перенаправлять на внутренний диск компа? Is This the World We Created? |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Sub Check_Disk() Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
TSM Пользователь Сообщений: 14 |
Не работает корректно. Когда диск подключен, всё OK. Но стоит отключиться от сети и следует длительная проверка, потом выскакивает сообщение Пробовал использовать номер ошибки, но что-то видимо не так делаю. Код ниже: Sub Check_Disk() Is This the World We Created? |
New Пользователь Сообщений: 4582 |
Предлагаю такой вариант Sub Check_Disk() |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Странно…У меня все работает. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
New Пользователь Сообщений: 4582 |
На самом деле инструкцию On Error Resume Next надо выше поднять на одну строку |
TSM Пользователь Сообщений: 14 |
#9 24.12.2008 19:35:11 Всё заработало! Спасибо всем за участие в решении проблемы. it’s a kind of magic Is This the World We Created? |
7 ответов
что-то вроде этого
лучше использовать переменную рабочей книги для обеспечения дальнейшего контроля (при необходимости) открытой рабочей книги
обновлено, чтобы проверить, что имя файла является реальной рабочей книгой, — которая также делает избыточную первоначальную проверку, отличную от сообщения пользователя, чем текстовое поле пустым
Dim strFile As String
Dim WB As Workbook
strFile = Trim(TextBox1.Value)
Dim DirFile As String
If Len(strFile) = 0 Then Exit Sub
DirFile = "C:Documents and SettingsAdministratorDesktop" & strFile
If Len(Dir(DirFile)) = 0 Then
MsgBox "File does not exist"
Else
On Error Resume Next
Set WB = Workbooks.Open(DirFile)
On Error GoTo 0
If WB Is Nothing Then MsgBox DirFile & " is invalid", vbCritical
End If
brettdj
03 май 2013, в 06:15
Поделиться
Я использую эту функцию для проверки существования файла:
Function IsFile(ByVal fName As String) As Boolean
'Returns TRUE if the provided name points to an existing file.
'Returns FALSE if not existing, or if it a folder
On Error Resume Next
IsFile = ((GetAttr(fName) And vbDirectory) <> vbDirectory)
End Function
Patrick Honorez
30 янв. 2015, в 14:37
Поделиться
Для проверки существования можно также использовать (работает как для файлов, так и для файлов):
Not Dir(DirFile, vbDirectory) = vbNullString
Результатом является True
если файл или каталог существует.
Пример:
If Not Dir("C:Temptest.xlsx", vbDirectory) = vbNullString Then MsgBox "exists" Else MsgBox "does not exist" End If
ZygD
18 нояб. 2015, в 06:21
Поделиться
Вот мой обновленный код. Проверяет, существует ли версия до сохранения и сохраняет в качестве следующего доступного номера версии.
Sub SaveNewVersion()
Dim fileName As String, index As Long, ext As String
arr = Split(ActiveWorkbook.Name, ".")
ext = arr(UBound(arr))
fileName = ActiveWorkbook.FullName
If InStr(ActiveWorkbook.Name, "_v") = 0 Then
fileName = ActiveWorkbook.Path & "" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1) & "_v1." & ext
End If
Do Until Len(Dir(fileName)) = 0
index = CInt(Split(Right(fileName, Len(fileName) - InStr(fileName, "_v") - 1), ".")(0))
index = index + 1
fileName = Left(fileName, InStr(fileName, "_v") - 1) & "_v" & index & "." & ext
'Debug.Print fileName
Loop
ActiveWorkbook.SaveAs (fileName)
End Sub
Andrew Prostko
21 март 2018, в 21:18
Поделиться
Я брошу это там, а потом утку. Обычная причина, чтобы проверить, существует ли файл, — это избежать ошибки при попытке ее открыть. Как насчет использования обработчика ошибок, чтобы справиться с этим:
Function openFileTest(filePathName As String, ByRef wkBook As Workbook, _
errorHandlingMethod As Long) As Boolean
'Returns True if filePathName is successfully opened,
' False otherwise.
Dim errorNum As Long
'***************************************************************************
' Open the file or determine that it doesn't exist.
On Error Resume Next:
Set wkBook = Workbooks.Open(fileName:=filePathName)
If Err.Number <> 0 Then
errorNum = Err.Number
'Error while attempting to open the file. Maybe it doesn't exist?
If Err.Number = 1004 Then
'***************************************************************************
'File doesn't exist.
'Better clear the error and point to the error handler before moving on.
Err.Clear
On Error GoTo OPENFILETEST_FAIL:
'[Clever code here to cope with non-existant file]
'...
'If the problem could not be resolved, invoke the error handler.
Err.Raise errorNum
Else
'No idea what the error is, but it not due to a non-existant file
'Invoke the error handler.
Err.Clear
On Error GoTo OPENFILETEST_FAIL:
Err.Raise errorNum
End If
End If
'Either the file was successfully opened or the problem was resolved.
openFileTest = True
Exit Function
OPENFILETEST_FAIL:
errorNum = Err.Number
'Presumabley the problem is not a non-existant file, so it's
'some other error. Not sure what this would be, so...
If errorHandlingMethod < 2 Then
'The easy out is to clear the error, reset to the default error handler,
'and raise the error number again.
'This will immediately cause the code to terminate with VBA standard
'run time error Message box:
errorNum = Err.Number
Err.Clear
On Error GoTo 0
Err.Raise errorNum
Exit Function
ElseIf errorHandlingMethod = 2 Then
'Easier debugging, generate a more informative message box, then terminate:
MsgBox "" _
& "Error while opening workbook." _
& "PathName: " & filePathName & vbCrLf _
& "Error " & errorNum & ": " & Err.Description & vbCrLf _
, vbExclamation _
, "Failure in function OpenFile(), IO Module"
End
Else
'The calling function is ok with a false result. That is the point
'of returning a boolean, after all.
openFileTest = False
Exit Function
End If
End Function 'openFileTest()
riderBill
10 дек. 2015, в 06:57
Поделиться
Возможно, это вызвано переменной Filename
File = TextBox1.Value
Должен быть
Filename = TextBox1.Value
matzone
03 май 2013, в 04:48
Поделиться
Вы должны установить цикл условий, чтобы проверить значение TextBox1.
If TextBox1.value = "" then
MsgBox "The file not exist"
Exit sub 'exit the macro
End If
Надеюсь, это поможет вам.
Leng Keong
03 май 2013, в 04:48
Поделиться
Ещё вопросы
- 1«Метрика» CNTK отображает неверную точность классификации
- 0Программирование для UPnP на C / C ++
- 0Поиск определенного значения в ассоциативном массиве
- 0Как переключить значение ввода на основе класса соседних элементов с помощью jQuery?
- 0в IE нет всплывающего окна activeX
- 0Запуск приложения Asp.Net Mvc под сайтом Php (WordPress) на IIS
- 1О событии «Загрузка»
- 1Как создать приложение для брандмауэра в Android?
- 1Хук Pre-commit изменяет AssemblyInfo
- 1Приложение Android падает после генерации звукового сигнала несколько раз
- 0Сосредоточьтесь на вводе только для чтения
- 0Zend Framework Hosting — не может включать bootstrap.php
- 1Включает ли dx преобразование в dex проверку оригинальных файлов классов?
- 1Шаблон Vue не обновляется
- 0классификация цвета гистограммы с плавающей точкой на основе общих значений
- 0Как обрабатывать templateUrl для сброса URL-адресов паролей?
- 1Java Menubar Action для класса
- 0Получить название категории или ссылку от Magento CMS
- 0Lightbox2 Номера изображений не верны! Всегда показывать только последний номер изображения
- 0Хороший способ использовать встроенные функции пользовательского интерфейса для мобильного сайта.
- 0Как создать неизменяемые свойства модели Sequelize?
- 1Как включить Intellisense моей собственной библиотеки .Net для приложения Python в Visual Studio 2017?
- 1Могу ли я обнаружить оба пейзажа в Android? [Дубликат]
- 0Возврат ссылок на объекты
- 1Protobuf-Net несколько производных контрактов
- 1Angular — router.navigate () не перенаправляет на целевую страницу
- 0Прекратить отправку обычного HTML при ошибке PHP?
- 0отключить / включить указатель мыши и отпуск мышью по клику — jquery
- 1Создание оболочки Cython вокруг функции Python
- 116-битное двоичное преобразование
- 1Как заполнить первую ячейку N / A при применении скользящего среднего к столбцу-Python
- 1GoogleAuth.signIn (). Then () не запущен
- 1Как я могу установить максимальный и минимальный уровни масштабирования для изображения в Android?
- 0HTML-текст прерывается, когда специальные символы, такие как «<», «>» и «&» в строке, используют vb.net
- 0вылил строку из текстового файла и сохранил значения в массив вместо векторов c ++
- 0Что считается пустым и корневым маршрутом в angular-ui-router
- 0Сброс пароля root для mysql
- 1Как скрипт и setTimeout / setInterval могут работать вместе в NodeJS?
- 0SQL INSERT WEIRD SYNTAX ОШИБКА MYSQL ИЗ PHP
- 0Получить каталог страницы HTML в файле PHP, который вызывается страницей HTML
- 1Tensorflow tf.train.Saver не сохраняет все переменные
- 0связь между контроллерами в angularjs
- 1Flash-видео продолжает воспроизводиться даже после нажатия кнопки «назад» на Android
- 0Выясните, включена ли опция радио, прежде чем нажать
- 1Я компилирую, а затем запускаю этот бит кода в java.exe, и я получаю сообщение об ошибке
- 1соответствие хэстэгу, упоминанию, URL и специальным символам из твита данных
- 0Как получить содержимое элемента, включая слушателей
- 0Использование printf для печати символов, когда у меня есть только пустой указатель на данные
- 0hasClass не работает
- 1Как я могу интерпретировать это отклонение обзора входа в Facebook?