I have this code. It is supposed to check if a file exists and open it if it does. It does work if the file exists, and if it doesn’t, however, whenever I leave the textbox blank and click the submit button, it fails. What I want, if the textbox is blank is to display the error message just like if the file didn’t exist.
Runtime-error «1004»
Dim File As String
File = TextBox1.Value
Dim DirFile As String
DirFile = "C:Documents and SettingsAdministratorDesktop" & File
If Dir(DirFile) = "" Then
MsgBox "File does not exist"
Else
Workbooks.Open Filename:=DirFile
End If
ZygD
21k39 gold badges77 silver badges98 bronze badges
asked May 3, 2013 at 3:43
2
something like this
best to use a workbook variable to provide further control (if needed) of the opened workbook
updated to test that file name was an actual workbook — which also makes the initial check redundant, other than to message the user than the Textbox is blank
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
answered May 3, 2013 at 5:01
3
I use this function to check for file existence:
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's a folder
On Error Resume Next
IsFile = ((GetAttr(fName) And vbDirectory) <> vbDirectory)
End Function
answered Jan 30, 2015 at 14:19
iDevlopiDevlop
24.6k11 gold badges89 silver badges147 bronze badges
13
For checking existence one can also use (works for both, files and folders):
Not Dir(DirFile, vbDirectory) = vbNullString
The result is True
if a file or a directory exists.
Example:
If Not Dir("C:Temptest.xlsx", vbDirectory) = vbNullString Then MsgBox "exists" Else MsgBox "does not exist" End If
answered Nov 18, 2015 at 4:35
ZygDZygD
21k39 gold badges77 silver badges98 bronze badges
1
A way that is clean and short:
Public Function IsFile(s)
IsFile = CreateObject("Scripting.FileSystemObject").FileExists(s)
End Function
answered Apr 3, 2020 at 4:37
Excel HeroExcel Hero
14.1k4 gold badges31 silver badges39 bronze badges
1
Function FileExists(ByRef strFileName As String) As Boolean
' TRUE if the argument is an existing file
' works with Unicode file names
On Error Resume Next
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
FileExists = objFSO.FileExists(strFileName)
On Error GoTo 0
End Function
To make the function run faster, objFSO can be made a global variable and the code can be modified and saved in a module like this:
Option Explicit
Dim objFSO As Object
Function FileExists(ByRef strFileName As String) As Boolean
' TRUE if the argument is an existing file
' works with Unicode file names
On Error Resume Next
If objFSO Is Nothing Then Set objFSO = CreateObject("Scripting.FileSystemObject")
FileExists = objFSO.FileExists(strFileName)
On Error GoTo 0
End Function
For strFileName
to be a unicode string, you can, for example, either get it from a cell value or define it in a special way, as Excel’s VBE doesn’t save string constants in Unicode. VBE does support Unicode strings already saved in string variables. You’re gonna have to look this up for further details.
Hope this helps somebody ^_^
answered Nov 19, 2021 at 0:46
JalalJalal
5466 silver badges12 bronze badges
Maybe it caused by Filename variable
File = TextBox1.Value
It should be
Filename = TextBox1.Value
answered May 3, 2013 at 3:52
matzonematzone
5,6933 gold badges17 silver badges20 bronze badges
1
Speed of Various FileExists Methods
I needed to check file existence for many of my projects, so I wanted to determine the fastest option. I used the micro timer code (see Benchmarking VBA Code) to run the File Exist functions below the table against a local folder with 2865 files to see which was faster. Winner used GetAttr. Using FSO method for Test 2 was a bit faster with the object defined as a global than not, but not as fast as the GetAttr method.
------------------------------------------------------
% of Fastest Seconds Name
------------------------------------------------------
100.00000000000% 0.0237387 Test 1 - GetAttr
7628.42784145720% 1.8108896 Test 2 - FSO (Obj Global)
8360.93687615602% 2.0522254 Test 2 - FSO (Obj in Function)
911.27399562739% 0.2163246 Test 3 - Dir
969.96844814586% 0.2302579 Test 4 - Dir$
969.75108156723% 0.2302063 Test 5 - VBA.Dir
933.82240813524% 0.2216773 Test 6 - VBA.Dir$
7810.66612746275% 1.8541506 Test 7 - Script.FSO
Function FileExistsGA(ByVal FileSpec As String) As Boolean
' Karl Peterson MS VB MVP
Dim Attr As Long
' Guard against bad FileSpec by ignoring errors
' retrieving its attributes.
On Error Resume Next
Attr = GetAttr(FileSpec)
If Err.Number = 0 Then
' No error, so something was found.
' If Directory attribute set, then not a file.
FileExistsGA = Not ((Attr And vbDirectory) = vbDirectory)
End If
End Function
Function FSOFileExists(sFilePathNameExt As String) As Boolean
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
FSOFileExists = fso.FileExists(sFilePathNameExt)
Set fso = Nothing
End Function
Function FileExistsDir(sFilePathNameExt As String) As Boolean
If Len(Dir(sFilePathNameExt)) > 0 Then FileExistsDir = True
End Function
Function FileExistsDirDollar(sFilePathNameExt As String) As Boolean
If Len(Dir$(sFilePathNameExt)) > 0 Then FileExistsDirDollar = True
End Function
Function FileExistsVBADirDollar(sFilePathNameExt As String) As Boolean
If Len(VBA.Dir$(sFilePathNameExt)) > 0 Then FileExistsVBADirDollar = True
End Function
Function FileExistsVBADir(sFilePathNameExt As String) As Boolean
If Len(VBA.Dir(sFilePathNameExt)) > 0 Then FileExistsVBADir = True
End Function
Public Function IsFileSFSO(s)
IsFileSFSO = CreateObject("Scripting.FileSystemObject").FileExists(s)
End Function
I realize that this does not fully answer the OP, but is provides information on which of the answers provided seems to be most efficient.
answered Nov 29, 2022 at 19:18
PhilBPhilB
764 bronze badges
I’ll throw this out there and then duck.
The usual reason to check if a file exists is to avoid an error when attempting to open it. How about using the error handler to deal with that:
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's 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's 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()
answered Dec 10, 2015 at 6:40
riderBillriderBill
7908 silver badges16 bronze badges
Here is my updated code. Checks to see if version exists before saving and saves as the next available version number.
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
answered Mar 21, 2018 at 20:52
You should set a condition loop to check the TextBox1 value.
If TextBox1.value = "" then
MsgBox "The file not exist"
Exit sub 'exit the macro
End If
Hope it help you.
answered May 3, 2013 at 4:05
Leng KeongLeng Keong
1431 silver badge3 bronze badges
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!
Содержание
- VBA Check if File or Folder Exists
- Using the Dir Command to Check If a File Exists
- Using the Dir Command to Check If a Folder Exists
- VBA Coding Made Easy
- VBA Code Examples Add-in
- Объект File. Работа с файлами
- Открытие файла
- Проверка существования файла
- Получение информации о файле
- Манипулирование файлами
- Создание временных файлов
- Семейство Files
- Проверка файла VBA существует — Функция VBA DIR для проверки наличия файла
- Проверьте наличие файла с помощью Excel VBA
- Как использовать файл проверки VBA в Excel?
- Пример № 1 — файл проверки VBA существует
- Пример № 2 — DIR с условием IF
- Рекомендуемые статьи
- Объект FileSystemObject
- Синтаксис
- Примечания
- Методы
- Свойства
- См. также
- Поддержка и обратная связь
VBA Check if File or Folder Exists
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:
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:
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!
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
Источник
Объект File. Работа с файлами
Объект File позволяет выполнять различные манипуляции с файлом, например, копировать или удалить файл, а также предоставляет доступ к информации о файле, например, можно получить размер файла или дату и время создания файла. Создать объект позволяет метод GetFile( ) объекта FileSystemObject . В параметре указывается путь к файлу. Путь может быть абсолютным или относительным. При указании относительного пути полный путь определяется с учетом местоположения текущего рабочего каталога и текущего диска. Пример создания объекта:
Открытие файла
Открыть файл позволяет метод OpenAsTextStream() объекта File , который возвращает ссылку на объект TextStream . Формат метода:
Необязательный параметр задает режим открытия файла:
- ForReading — чтение (значение по умолчанию). Указатель устанавливается на начало файла;
- ForWriting — запись. Содержимое файла удаляется. Указатель устанавливается на начало файла;
- ForAppending — добавление. Содержимое файла не удаляется. Указатель устанавливается на конец файла.
В необязательном параметре указываются следующие значения:
- TristateFalse — 0 — кодировка ASCII (значение по умолчанию);
- TristateTrue — -1 — кодировка Unicode;
- TristateUseDefault — -2 — кодировка, используемая в системе по умолчанию.
Пример открытия файла на запись:
Проверка существования файла
Проверить существование файла позволяет метод FileExists( ) объекта FileSystemObject . В параметре указывается путь к файлу. Метод возвращает значение True , если файл существует и False — в противном случае. Пример:
Получение информации о файле
Получить информацию о файле позволяют следующие свойства объекта File :
- Size — размер файла;
- Path — полный путь к файлу (например, D:VBAfile1.txt );
- ShortPath — короткий путь к файлу;
- Drive — имя диска (например, D: );
- Name — имя файла без пути;
- ShortName — короткое имя файла;
- Type — тип файла;
- ParentFolder — ссылка на объект родительского каталога;
- DateCreated — дата и время создания файла;
- DateLastAccessed — дата и время последнего доступа к файлу;
- DateLastModified — дата и время последнего изменения файла;
- Attributes — позволяет определить какие атрибуты установлены для файла. Содержит сумму следующих значений:
- 0 — Normal — обычный файл (только чтение);
- 1 — ReadOnly — файл доступен только для чтения (чтение и запись);
- 2 — Hidden — скрытый файл (чтение и запись);
- 4 — System — системный файл (чтение и запись);
- 16 — Directory — путь указывает на каталог (только чтение);
- 32 — Archive — архивный файл (чтение и запись);
- 64 — Alias — имя файла является псевдонимом (только чтение);
- 128 — Compressed — сжатый файл (только чтение).
Проверить, установлен атрибут или нет, позволяет оператор And . Если атрибут установлен, то результатом операции будет ненулевое значение. Если этому свойству присвоить новое значение, то атрибуты файла (доступные для записи) будут изменены.
Пример получения и изменения атрибутов файла показан в листинге 13.1.
Листинг 13.1. Получение и изменение атрибутов файла
Манипулирование файлами
Для манипулирования файлами предназначены следующие методы объекта File :
- Move — позволяет переместить или переименовать файл:
Вместо метода Move() можно воспользоваться методом MoveFile() объекта FileSystemObject . Формат метода:
Пример переименования файла file1.txt в file3.txt :
Параметр может содержать подстановочные знаки в последнем компоненте пути. Например, переместить все текстовые файлы из каталога folder1 в каталог folder2 можно так:
- Copy [, ] — позволяет скопировать содержимое файла в другой файл. Если во втором параметре указано значение True (значение по умолчанию), то существующий файл будет перезаписан, а если значение False — то генерируется ошибка. Пример:
Вместо метода Copy() можно воспользоваться методом CopyFile() объекта FileSystemObject . Формат метода:
Пример создания копии файла file3.txt :
Параметр может содержать подстановочные знаки в последнем компоненте пути. Например, скопировать все текстовые файлы из каталога folder2 в каталог folder1 можно так:
- Delete [ ] — удаляет файл. Если в параметре указано значение True , то файл удаляется даже в случае, если он доступен только для чтения. По умолчанию параметр имеет значение False . Пример:
Вместо метода Delete() можно воспользоваться методом DeleteFile() объекта FileSystemObject . Формат метода:
Пример удаления файла file3.txt :
Создание временных файлов
С помощью метода GetTempName() объекта FileSystemObject можно сгенерировать уникальное имя для временного файла. Обратите внимание на то, что метод не создает файл, а лишь возвращает уникальное имя в виде строки (например, «radDA657.tmp «). Пример:
Семейство Files
Семейство Files содержит несколько объектов File . Доступ к объекту в коллекции выполняется с помощью метода Item( ) или с помощью цикла For Each. Next . Получить количество объектов в коллекции позволяет свойство Count .
С помощью свойства Files объекта Folder можно получить ссылку на коллекцию всех файлов в каталоге. В качестве примера выведем названия всех файлов в каталоге:
Статьи по Visual Basic for Applications (VBA)
Помощь сайту
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов
Источник
Проверка файла VBA существует — Функция VBA DIR для проверки наличия файла
Проверьте наличие файла с помощью Excel VBA
VBA Check File Exists помогает проверить, существует ли файл в Location с помощью Excel VBA. После упоминания пути к файлу на компьютере, что если кто-то удалит файл или изменит путь к папке с файлом, очевидно, что в этом случае наш код выдаст ошибку. Чтобы решить эту проблему, мы можем сделать одну вещь, прежде чем мы действительно откроем файл, мы можем проверить, существует ли упомянутый файл или нет.
В этой статье мы покажем вам, как проверить, существует ли указанный файл или нет.
Как проверить, существует файл или нет?
- Как Excel VBA знает, существует ли файл или нет ??
- По умолчанию это не может .
- Так как же тогда ??
- Нам нужно использовать функцию под названием «Dir», чтобы проверить, существует файл или нет.
Что делает функция DIR?
Функция VBA DIR возвращает имя имени файла с его расширением в указанном пути к папке. Если в папке нет файла, она возвращает пустую строку.
Таким образом, используя эту функцию, мы можем на самом деле проверить, существует файл или нет. Даже без функции DIR мы можем проверить, существует файл или нет. Мы увидим некоторые примеры ниже.
Как использовать файл проверки VBA в Excel?
Мы узнаем, как использовать функцию проверки наличия файлов VBA, с несколькими примерами в Excel.
Вы можете скачать этот файл Excel с шаблоном проверки VBA здесь — Шаблон проверки VBA с файлом Excel существует
Пример № 1 — файл проверки VBA существует
Хорошо, давайте напишем некоторый код, чтобы проверить, существует файл или нет. Выполните следующие шаги, чтобы написать код самостоятельно.
Шаг 1: Для этого перейдите в окно VBA и в меню «Вставка» выберите «Модуль», как показано ниже.
Шаг 2: Запустите подпроцедуру.
Код:
Шаг 3: Определите переменную как String.
Код:
Шаг 4: Теперь я хочу протестировать файл с именем «Глава-11. InputBoxes.xlsm ”в моем E-Drive”. Я назначу свой путь к файлу этой переменной.
Код:
Шаг 5: Теперь определите еще одну переменную для применения функции DIR.
Код:
Шаг 6: Теперь для второй переменной откройте функцию DIR.
Код:
Шаг 7: Функция DIR требует путь к файлу. Поскольку мы уже присвоили путь к файлу переменной «FilePath», мы можем просто передать эту переменную в функцию DIR.
Код:
Шаг 8: Теперь функция DIR возвращает только имя файла как «Глава-11. InputBoxes »из указанного пути к файлу. Итак, давайте покажем результат в окне сообщения.
Код:
Шаг 9: Теперь запустите макрос, чтобы увидеть результат.
Поскольку в указанном пути существует файл, наша функция DIR отфильтровывает имя файла по огромному пути.
Шаг 10: Теперь я изменю имя файла на другое, чего нет в указанном пути.
Код:
Шаг 11: Если я сейчас запусту код, он вернет пустую строку в окне сообщения.
Функция DIR лучше всего подходит для использования с оператором IF в VBA. Выше мы могли видеть только имя файла с его расширением, если оно существует, иначе мы могли видеть только пустую строку.
Пример № 2 — DIR с условием IF
Шаг 1: Но используя оператор IF с функцией DIR, мы можем изменить наши результаты. Для примера посмотрите на код ниже.
Код:
Шаг 2: Здесь условие IF проверяет, является ли значение переменной «FileExists» ничем («») или нет. Если значение переменной — ничто («»), то он вернет результат как «Файл не существует в указанном пути», либо он вернет результат как «Файл существует в указанном пути»
Ниже приведен пример того же скриншота.
Используя функцию DIR, мы можем проверить, существует файл или нет.
Рекомендуемые статьи
Это руководство к VBA Check File Exists. Здесь мы обсудим, как использовать функцию проверки наличия файла в Excel VBA, а также с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —
- Функция копирования и вставки в VBA
- Функция подстроки Excel
- Индекс VBA вне диапазона
- Excel ISNUMBER Formula
Источник
Объект FileSystemObject
Предоставляет доступ к файловой системе компьютера.
Синтаксис
Scripting.FileSystemObject
Примечания
Приведенный ниже код иллюстрирует использование объекта FileSystemObject для возврата объекта TextStream, который можно читать, и в который можно записать данные.
- Функция CreateObject возвращает объект FileSystemObject ( fs ).
- Метод CreateTextFile создает файл в качестве объекта TextStream ( a ).
- Метод WriteLine записывает строку текста в созданный текстовый файл.
- Метод Close опустошает буфер и закрывает файл.
Методы
Метод | Описание |
---|---|
BuildPath | Добавляет имя в существующий путь. |
CopyFile | Копирует один или несколько файлов из одного расположения в другое. |
CopyFolder | Копирует одну или несколько папок из одного расположения в другое. |
CreateFolder | Создает новую папку. |
CreateTextFile | Создает текстовый файл и возвращает объект TextStream, который можно использовать для чтения или записи в файл. |
DeleteFile | Удаляет один или несколько указанных файлов. |
DeleteFolder | Удаляет одну или несколько указанных папок. |
DriveExists | Проверяет, существует ли указанный диск. |
FileExists | Проверяет, существует ли указанный файл. |
FolderExists | Проверяет, существует ли указанная папка. |
GetAbsolutePathName | Возвращает полный путь из корневого каталога диска для указанного пути. |
GetBaseName | Возвращает базовое имя указанного файла или папки. |
GetDrive | Возвращает объект Drive, соответствующий диску в указанном пути. |
GetDriveName | Возвращает имя диска указанного пути. |
GetExtensionName | Возвращает имя расширения файла для последнего компонента в указанном пути. |
GetFile | Возвращает объект файла для указанного пути. |
GetFileName | Возвращает имя файла или папки для последнего компонента в указанном пути. |
GetFolder | Возвращает объект Folder для указанного пути. |
GetParentFolderName | Возвращает имя родительской папки последнего компонента в указанном пути. |
GetSpecialFolder | Возвращает путь к некоторым специальным папкам Windows. |
GetTempName | Возвращает созданный случайным образом временный файл или папку. |
Move | Перемещает заданный файл или указанную папку из одного места в другое. |
MoveFile | Перемещает один или несколько файлов из одного места в другое. |
MoveFolder | Перемещает одну или несколько папок из одного места в другое. |
OpenAsTextStream | Открывает указанный файл и возвращает объект TextStream, который можно использовать для считывания, записи и дополнения данных в файле. |
OpenTextFile | Открывает файл и возвращает объект TextStream, который можно использовать для доступа к файлу. |
WriteLine | Записывает заданную строку и символ новой строки в файл TextStream. |
Свойства
Свойство | Описание |
---|---|
Drives | Возвращает коллекцию всех объектов Drive на компьютере. |
Name | Устанавливает или возвращает имя указанного файла или заданной папки. |
Path | Возвращает путь для указанного файла, диска или указанной папки. |
Size | Для файлов возвращает размер указанного файла в байтах; для папок возвращает размер всех файлов и вложенных папок в байтах. |
Type | Возвращает сведения о типе файла или папки (например, для файлов с расширением .TXT возвращается «Text Document»). |
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
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
Поделиться
Ещё вопросы
- 0Изменение времени при использовании входного плагина jdbc в logstash
- 0jQuery originalevent offsetx свойство?
- 1Попытка создать случайный массив, который я могу вызвать 5 раз, и который я могу проверить на ввод пользователя
- 1Google Drive Rest API для Android
- 0оптимизация mysql UPDATE JOIN индексы производительности
- 0используя php foreach для данных в электронном письме
- 0Есть ли библиотека для распознавания даты в любом формате?
- 0Пользовательские страницы ошибок для 404 и 500 статусов
- 0Добавление кнопки закрытия в автоматическое всплывающее окно
- 1Как использовать команды только при запуске текущей команды?
- 0перенос слов в машинах MAC
- 0Простая структура с использованием div
- 0Многоязычный скрипт неправильно перенаправляет на запрашиваемую страницу
- 1Как отсортировать список <String>, содержащий несколько полей, разделенных ‘| ~’
- 0затемнение страницы с помощью jquery после нажатия кнопки
- 0Компонент не разрешает внедрение $ scope (угловой 1.3.16)
- 0Дата по умолчанию не отображается правильно в jQuery datePicker
- 1Скрыть панель кнопок в Android
- 0Как получить текущее значение DB_HOST запроса в Laravel
- 0Параметры обратного вызова смещены
- 1Различное поведение с torch.mean (data, 0) и torch.mean (data) для вектора
- 1Рисование текста на холсте шрифтом WINGDING.ttf не работает на Android
- 0Заголовок в теге alt (alt = ‘<h1> Test </ h1>’)
- 1ASP.NET Publishing со старой ссылкой на сборку
- 0Выйти из Facebook Чат через JavaScript
- 1Простой пример ContactsContract API
- 0Могут ли частные члены получать доступ с помощью Public Pointer к нему в C ++?
- 1Модуль Es 6 загружен в Chrome, но не запущен
- 1Цикл while с условием nextLine
- 1Каков тип потока для функции zipAll, например, в lodash / fp?
- 1При нажатии на Sprite не регистрируется
- 0Ошибка триггера MYSQL. Как решить?
- 0Анимация SpriteSheet -> Лаг?
- 1Ошибка при вызове функции в Python3.5
- 1Совместное использование транзакций между соединениями
- 0Возникла проблема с подключением моего углового контроллера к моему представлению
- 1Странное изображение, созданное matplotlib
- 1Получить результат postgres-запроса как переменную в nodejs
- 1Как я могу использовать группы lambdaj для сценария по умолчанию
- 0Codeigniter возвращает нулевой массив из пользовательской функции
- 1Могу ли я сделать http-запрос с использованием javascript с локального хоста на веб-сайт?
- 0Angular Dropdown (может быть просто IE): странное расположение выпадающего в IE
- 1Ошибка Gson? Присутствие десериализатора повреждает процесс сериализации в Gson
- 1Android — создайте схему для моего приложения, которая будет открываться по ссылке на веб-странице
- 0Простой способ иметь горизонтальную прокрутку в HTML?
- 0HighCharts / HighStocks: круговая диаграмма с Highstock
- 0Подключите Java удаленно к базе данных MYSQL в другой сети
- 0Извлечь верхнюю и нижнюю границы из списка (вектор) 2D координат
- 1почему форма с именем добавляется в свойства документа
- 0Получить все с отличным идентификатором пользователя и порядком по общему счету
Настоящая заметка продолжает знакомство с VBA. В ней представлены некоторые «практичные» функции, которые могут использоваться в ваших приложениях либо помогут в создании аналогичных функций. Эти функции наиболее полезны, когда вызываются из другой процедуры VBA. Следовательно, они объявляются с ключевым словом Private и не отображаются в диалоговом окне Excel Мастер функций (подробнее см. Работа с процедурами VBA).[1]
Функция FileExists
Данная функция получает один аргумент (путь и имя файла) и возвращает ИСТИНА, если файл существует.
Private Function FileExists(fname) As Boolean ‘ Возвращает TRUE, если файл существует Dim x As String x = Dir(fname) If x <> «» Then FileExists = True _ Else FileExists = False End Function |
Скачать заметку в формате Word или pdf, примеры в архиве (политика безопасности провайдера не позволяет загружать файлы Excel с поддержкой макросов)
Функция FileNameOnly
Функция получает один аргумент (путь и имя файла; не забывайте брать строку в кавычки) и возвращает только имя файла.
Private Function FileNameOnly(pname) As String ‘ Возвращает имя файла из строки путь/имя файла Dim temp As Variant temp = Split(pname, Application.PathSeparator) FileNameOnly = temp(UBound(temp)) End Function |
Функция использует функцию VBA Split, которая принимает строку (вместе с символами-разделителями) и возвращает массив типа variant, содержащий элементы, которые находятся между символами-разделителями. В рассматриваемом случае переменной temp присваивается массив, содержащий текстовые строки между Application.PathSeparater (обычно в качестве разделителя используется обратная косая черта).
Если в качестве аргумента указать "
с:excelfiles2010backupbudget.xlsx"
, функция возвратит строку budget.xlsx.
Функция FileNameOnly обрабатывает любой путь и имя файла (даже если файла не существует). Если файл существует, лучше воспользоваться следующей более простой функцией.
Private Function FileNameOnly2(pname) As String FileNameOnly2 = Dir(pname) End Function |
Функция PathExists
Функция получает один аргумент (путь) и возвращает ИСТИНА, если путь существует.
Private Function PathExists(pname) As Boolean ‘ Возвращает TRUE, если путь существует If Dir(pname, vbDirectory) = «» Then PathExists = False Else PathExists = (GetAttr(pname) And vbDirectory) = vbDirectory End If End Function |
Функция RangeNameExists
Функция получает один аргумент (название диапазона) и возвращает ИСТИНА, если в активной рабочей книге существует указанное название диапазона.
Private Function RangeNameExists(nname) As Boolean ‘ Возвращает TRUE, если имя диапазона существует Dim n As Name RangeNameExists = False For Each n In ActiveWorkbook.Names If UCase(n.Name) = UCase(nname) Then RangeNameExists = True Exit Function End If Next n End Function |
Функция SheetExists
Функция получает один аргумент (название рабочего листа) и возвращает ИСТИНА, если данный рабочий лист существует в активной рабочей книге.
Private Function SheetExists(sname) As Boolean ‘ Возвращает TRUE, если лист существует в активной рабочей книге Dim x As Object On Error Resume Next Set x = ActiveWorkbook.Sheets(sname) If Err = 0 Then SheetExists = True _ Else SheetExists = False End Function |
Функция WorkbooklsOpen
Функция получает один аргумент (название рабочей книги) и возвращает ИСТИНА, если данная рабочая книга открыта.
Private Function WorkbookIsOpen(wbname) As Boolean ‘ Возвращает TRUE, если рабочая книга открыта Dim x As Workbook On Error Resume Next Set x = Workbooks(wbname) If Err = 0 Then WorkbookIsOpen = True _ Else WorkbookIsOpen = False End Function |
Проверка принадлежности к коллекции
Следующая функция представляет собой образец «групповой» функции, с помощью которой можно определить, является ли объект членом коллекции.
Private Function IsInCollection(Coin As Object, _ Item As String) As Boolean Dim Obj As Object On Error Resume Next Set Obj = Coin(Item) IsInCollection = Not Obj Is Nothing End Function |
Эта функция имеет два аргумента: коллекцию (объект) и элемент (строка), который может быть либо не быть членом коллекции. Функция будет создавать объектную переменную, представляющую элемент коллекции. Если попытка увенчается успехом, функция возвратит True; иначе — False. Функцию IsInCollection можно использовать вместо трех других функций, приведенных выше. Чтобы определить, содержится ли в активной рабочей книге диапазон Data, вызовите функцию IsInCollection с помощью следующего оператора:
MsgBox IsInCollection(ActiveWorkbook.Names, "
Data"
)
Для того чтобы определить, открыта ли рабочая книга с названием Budget, используйте следующий оператор:
MsgBox IsInCollection(Workbooks, "
budget.xlsx"
)
Чтобы узнать, содержит ли активная рабочая книга рабочий лист Лист1, используйте следующий оператор:
MsgBox IsInCollection(ActiveWorkbook.Worksheets, "
Лист1"
)
Получение значения из закрытой рабочей книги
В VBA не существует метода получения значения из закрытого файла рабочей книги. Однако вы можете воспользоваться возможностью управления ссылками на файлы, которая предоставляется в Excel. В настоящем разделе описана функция VBA GetValue, которая получает значение из закрытой книги. Эта задача выполняется в результате вызова макроса XLM, который появился в «доисторических» версиях Excel (до версии 5), но поддерживается до сих пор (подробнее о макрофункциях xlm см. Функция Получить.Ячейку).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Private Function GetValue(path, file, sheet, ref) ‘ Выборка значения из закрытой книги Dim arg As String ‘ Проверка существования файла If Right(path, 1) <> «» Then path = path & «« If Dir(path & file) = «» Then GetValue = «Файл не найден» Exit Function End If ‘ Создание аргумента arg = «‘» & path & «[» & file & «]» & sheet & «‘!» & _ Range(ref).Range(«A1»).Address(, , xlR1C1) ‘ Вызов макроса XLM GetValue = ExecuteExcel4Macro(arg) End Function |
Функция GetValue принимает четыре аргумента:
- path — путь к закрытому файлу (например,
"
d:files"
); - file — название рабочей книги (например,
"
budget.xlsх"
); - sheet — название рабочего листа (например,
"
Лист1"
); - ref — ссылка на ячейку (например,
"
С4"
).
Следующая процедура демонстрирует, как используется функция GetValue. В этой процедуре отображается значение ячейки С1 листа Лист2 файла Закрытая_книга.xlsx, расположенного в текущей папке:
Sub TestGetValue() Dim p As String, f As String Dim s As String, a As String p = ThisWorkbook.path f = «Закрытая_книга.xlsx» s = «Лист2» a = «C1» MsgBox GetValue(p, f, s, a) End Sub |
Ниже приведен еще один пример. Эта процедура считывает 160 значений (20 строк и 8 столбцов) из закрытого файла и помещает эти значения на активный рабочий лист:
Sub TestGetValue2() Dim p As String, f As String Dim s As String, a As String Dim r As Long, c As Long p = ThisWorkbook.path f = «Закрытая_книга.xlsx» s = «Лист1» Application.ScreenUpdating = False For r = 1 To 20 For c = 1 To 8 a = Cells(r, c).Address Cells(r, c) = GetValue(p, f, s, a) Next c Next r End Sub |
Функция GetValue не работает, если ее использовать в формуле рабочего листа. Эту функцию вообще не следует использовать в листах Excel, поскольку для получения значения из закрытого файла можно просто создать формулу со ссылкой.
[1] По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 358–362.
Вы можете использовать функцию Dir с параметром vbHidden
Visual Basic | ||
|
Это ДОБАВИТ выдачу скрытых файлов к обычным. То есть, если у вас есть файл IterPara.txt и на нем дополнительных атрибутов не стоит, он будет выдан. Если он скрытый — тоже выдан. А если на нем стоит, например, атрибут «системный» и не стоит «скрытый» — не будет. Ну и в случае, если такого файла нет.
Если же надо выдать сообщение тогда и только тогда, когда файл имеет атрибут «скрытый», лучше воспользоваться FSO. Тут перебор файлов в каталоге, но можно и отдельный проверять.
Visual Basic | ||
|
В этом руководстве вы изучите сценарий VBA, чтобы проверить, существует ли определенный файл в указанной папке, и если он существует, то удалите его из папки в Excel.
Проверьте, существует ли файл в папке, а затем удалите его в Excel с помощью кода VBA.
Следующий сценарий VBA помогает проверить, существует ли определенный файл в папке, и удалить его, если он существует. Пожалуйста, сделайте следующее.
1. В открытой книге Excel нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули, затем скопируйте следующий скрипт VBA в папку Модуль (код) окно.
Код VBA: проверьте, существует ли файл в указанной папке, а затем удалите его.
Sub CheckFileThenDelete()
'Updated by Extendoffice 20221024
Dim FilePath As String
FilePath = "C:UsersWin10x64TestDesktopsave attachmentsaaa.xlsx"
If Dir(FilePath) <> "" Then
MsgBox "The file exists in the folder, click the OK button to delete it.", vbInformation, "Kutools for Excel"
Kill FilePath
Else
If Dir(FilePath) = "" Then
MsgBox "The file does not exist.", vbInformation, "Kutools for Excel"
End If
End If
End Sub
Внимание: В коде VBA C:UsersWin10x64TestDesktopсохранить вложенияaaa.xlsx это путь к файлу, который вы хотите проверить, существует ли он. В этом примере я хочу проверить, является ли файл Excel с именем «ааа” существует в папке с именем “сохранить вложения» на рабочем столе. Вы можете изменить путь к файлу и расширение файла в соответствии с вашими потребностями.
3. нажмите F5 ключ для запуска кода.
4. Если файл существует, вы получите Kutools for Excel диалоговое окно, как показано на скриншоте ниже. Щелкните OK кнопку, чтобы удалить этот файл из папки.
Если файл не существует в папке, другой Kutools for Excel диалоговое окно также появится, чтобы предупредить вас.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (0)
Оценок пока нет. Оцените первым!