Vba excel имя файла с расширением

 

obratka

Пользователь

Сообщений: 58
Регистрация: 11.08.2014

Коллеги, добрый день!
Необходима ваша помощь в решении следующей задачи, у меня имеется ячейка, в которой прописан путь к определенной папке на диске, для примера: C:UsersDesktopfile1.xls. Меня интересует каким образом из данной строки можно вычленить окончание файла и показать его в соседней ячейке, т.е. в данном примере .xls.
Чувствую, что использовать здесь нужно =правсимв, но аргумент по количеству символов должен быть динамическим и грубо говоря осуществлять отсчет от самой правой точки в ячейке (как это осуществить я не знаю)

Заранее спасибо!

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Вы тему назвали так, что только ПРАВСИМВ можно применить
Название темы должно отражать суть задачи. Предложите новое. Модераторы переименуют тему.

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#3

07.12.2016 20:13:42

obratka, на VBA очень просто, а формулами сложнее, т.к. нет аналога функции InstrRev

Код
Function Ext(s)
  Ext = Mid(s, InStrRev(s, ".") + 1) 'если нужно расширение с точкой, уберите "+1"
End Function

Предложение по названию темы: Выделить расширение файла из полного пути

Изменено: Казанский07.12.2016 20:16:53

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

По-деревенски, просто, но вдруг?

 

Karataev

Пользователь

Сообщений: 2306
Регистрация: 23.10.2014

Вариант с помощью формулы. Предполагается, что путь находится в «A1»:
=».»&ПСТР(A1;ПОИСК(СИМВОЛ(2);ПОДСТАВИТЬ(A1;».»;СИМВОЛ(2);ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;».»;»»))))+1;ДЛСТР(A1))
Вариант с помощью формулы массива (вставляется Ctrl+Shift+Enter). Может быть эта формула чем-то лучше:
=ПРАВСИМВ(A1;МИН(ЕСЛИ(ЛЕВСИМВ(ПРАВСИМВ(A1;СТРОКА(A2:A10));1)=».»;СТРОКА(A2:A10);»»)))

Изменено: Karataev07.12.2016 21:45:23

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

=ПСТР(ПРАВБ(B2;5);ПОИСК(«.»;ПРАВБ(B2;5))+1;4)
Точка ведь одна?
=ПСТР(B2;ПОИСК(«.»;B2)+1;5)

 

Bema

Пользователь

Сообщений: 6759
Регистрация: 15.02.2016

Ну и я отмечусь:
=ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ(«.»;A1))

Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл

 

Karataev

Пользователь

Сообщений: 2306
Регистрация: 23.10.2014

#8

07.12.2016 20:40:35

Цитата
vikttur написал: Точка ведь одна?

точка не является запрещенным символом в пути, поэтому точек может быть несколько

 

kuklp

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

#9

07.12.2016 20:43:36

Цитата
Karataev написал: точек может быть несколько

Дык, Ляксей предусмотрел сие в №3.

Я сам — дурнее всякого примера! …

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

А если с двойным или с тройным расширением? Вдруг на этом месте что-то непотребное окажется? ТС скажет — «форумчане не доглядели!»  :)

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#13

07.12.2016 20:51:39

Цитата
_Igor_61 написал: А если с двойным или с тройным расширением?

Каков пример…

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

Так и не было примера-то…

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#15

08.12.2016 14:52:43

Цитата
_Igor_61 написал: Так и не было примера
Цитата
obratka написал: для примера: C:UsersDesktopfile1.xls
 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#16

08.12.2016 15:02:48

Код
Function GetFileExtension(FileName$)
  Dim fso
  Set fso = CreateObject("Scripting.FileSystemObject")
  GetFileExtension fso.GetExtensionName(FileName)
End Function

Sub Test()
  MsgBox GetFileExtension("C:UsersDesktopfile1.xls")
End Sub

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#17

08.12.2016 15:04:06

Цитата
_Igor_61 написал: А если с двойным или с тройным расширением?
Цитата
Казанский написал: на VBA очень просто
Код
Function ExtOnly(s As String)
    ExtOnly = CreateObject("Scripting.FileSystemObject").GetExtensionName(s)
End Function

Согласие есть продукт при полном непротивлении сторон.

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

Sanja, спасибо за пример. Я так ещё не писал. :)

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

JayBhagavan, а Вам за ссылку мерсис  :)

Согласие есть продукт при полном непротивлении сторон.

 

Udik

Пользователь

Сообщений: 372
Регистрация: 07.03.2016

excel 2016х64 Контакты в профиле

#20

08.12.2016 15:41:52

Мой вариант
=».» & СЖПРОБЕЛЫ(ПРАВСИМВ(ПОДСТАВИТЬ(A2;».»;ПОВТОР(» «;255));255))

Арфы — нет, возьмите бубен.

‘[/vba]
‘ Keep It Simple
‘ .. why use FileSystemObject or Split when Left and Mid will do it
‘ the FSO has some 33 Subs or Functions
that have to be loaded each time it is created.
‘ and needs the file to exist … yet is only a bit slower

… under twice time.. some good code in FSO
‘ conservation is good .. spare a few electrons. ????… save a few millionths of a sec

‘Also
‘ .. why the format of a function that we all seem to use like

‘ .. Function GetAStr(x) as string

‘ dim extraStr as string

‘ a lot of work with extraStr..
‘ that could have been done with the string variable GetAStr
already created by the function

‘ then .. GetAStr=extraStr to put it in its right place
‘ .. End Function

Function GetNameL1$(FilePath$, Optional NLess& = 1)

‘ default Nless=1 => name only
‘ NLess =2 => xcopya.xls xcopyb.xls xcopy7.xlsm all as xcopy to get find latest version
‘ Nless = — 4 or less => name with name.ext worka.xlsm

GetNameL1 = Mid(FilePath, InStrRev(FilePath, «») + 1)

GetNameL1 = Left(GetNameL1, InStrRev(GetNameL1, «.») — NLess)

End Function

Function LastFold$(FilePath$)

LastFold = Left(FilePath, InStrRev(FilePath, «») — 1)

LastFold = Mid(LastFold, InStrRev(LastFold, «») + 1)

End Function

Function LastFoldSA$(FilePath$)

Dim SA$(): SA = Split(FilePath, «»)

LastFoldSA = SA(UBound(SA) — 1)

End Function

[<vba]

Содержание

  1. Метод Application.GetOpenFilename (Excel)
  2. Синтаксис
  3. Параметры
  4. Возвращаемое значение
  5. Примечания
  6. Пример
  7. Поддержка и обратная связь
  8. How to get the excel file name / path in VBA
  9. 7 Answers 7
  10. Объект File. Работа с файлами
  11. Открытие файла
  12. Проверка существования файла
  13. Получение информации о файле
  14. Манипулирование файлами
  15. Создание временных файлов
  16. Семейство Files
  17. Объект FileSystemObject
  18. Синтаксис
  19. Примечания
  20. Методы
  21. Свойства
  22. См. также
  23. Поддержка и обратная связь

Метод Application.GetOpenFilename (Excel)

Отображает стандартное диалоговое окно Открыть и получает у пользователя имя файла без фактического открытия файлов.

Синтаксис

выражение.GetOpenFilename (FileFilter, FilterIndex, Title, ButtonText, MultiSelect)

выражение: переменная, представляющая объект Application.

Параметры

Имя Обязательный или необязательный Тип данных Описание
FileFilter Необязательный Variant Строка, указывающая условия фильтрации файлов.
FilterIndex Необязательный Variant Указывает значения индексов условий фильтрации файлов по умолчанию — от 1 до количества фильтров, указанных в FileFilter. Если этот аргумент пропущен или его значение превышает число имеющихся фильтров, используется первый фильтр файлов.
Title Необязательный Variant Указывает заголовок диалогового окна. Если этот аргумент пропущен, используется заголовок «Открыть».
ButtonText Необязательный Variant Только для Macintosh.
MultiSelect Необязательный Variant Значение True, чтобы разрешить выбор нескольких имен файлов. Значение False, чтобы разрешить выбор только одного имени файла. Значение по умолчанию — False.

Возвращаемое значение

Примечания

Эта строка, передаваемая в аргументе FileFilter, состоит из пар строк фильтра файлов, после которых идет спецификация фильтра файлов MS-DOS с подстановочным знаком, где каждая часть и каждая пара разделяются запятыми. Каждая отдельная пара указана в раскрывающемся списке Тип файлов. Например, следующая строка указывает два фильтра файлов — text и addin:

«Text Files (*.txt), *.txt,Add-In Files (*.xla), *.xla»

Чтобы использовать разные выражения с подстановочными знаками MS-DOS для одного типа фильтра файлов, разделяйте выражения с подстановочными знаками точкой с запятой. Пример: «Visual Basic Files (*.bas; *.txt), *.bas;*.txt» .

Если FileFilter пропущен, этому аргументу по умолчанию присваивается значение «All Files (*.*), *.*» .

Этот метод возвращает выбранное имя файла или имя, введенное пользователем. Возвращаемое имя может содержать путь. Если параметру MultiSelect присвоено значение True, возвращаемое значение является массивом выбранных имен файлов (даже если выбрано только одно имя файла). Возвращается значение False, если пользователь отменяет использование диалогового окна.

Этот метод может менять текущий диск или папку.

Пример

В этом примере отображается диалоговое окно Открыть с фильтром, настроенным на текстовые файлы. Если пользователь выбирает имя файла, код отображает это имя файла в окне сообщения.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

How to get the excel file name / path in VBA

Say, I’m writing a VBA inside my excel file sample.xls. Now I want to get the full path of sample.xls in my VBA. How do I do it?

7 Answers 7

If you mean VBA, then you can use FullName, for example:

(updated as considered by the comments: the former used ActiveWorkbook.FullName could more likely be wrong, if other office files may be open(ed) and active. But in case you stored the macro in another file, as mentioned by user @user7296559 here, and really want the file name of the macro-using file, ActiveWorkbook could be the correct choice, if it is guaranteed to be active at execution time.)

this is a simple alternative that gives all responses, Fullname, Path, filename.

If you need path only this is the most straightforward way:

if you need path only without file name:

it would return D:Folder

if you need file path with file name also:

it would return D:Foldersample.xls

if you need file name only:

it would return sample.xls

so if you want combine file path and file name to get full directory don’t forget to add «» between. otherwise its simpler using .Path

ActiveWorkbook.FullName would be better I think, in case you have the VBA Macro stored in another Excel Workbook, but you want to get the details of the Excel you are editing, not where the Macro resides.

If they reside in the same file, then it does not matter, but if they are in different files, and you want the file where the Data is rather than where the Macro is, then ActiveWorkbook is the one to go for, because it deals with both scenarios.

Источник

Объект 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
Скриншот реквизитов

Источник

Объект 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 и обратная связь.

Источник

I need to get file name without extension name by VBA. I know ActiveWorkbook.Name property , but if user haves Windows property Hide extensions for known file types turn off, the result of my code will be [Name.Extension]. How can I return only name of Workbook independent of windows property?

I try even ActiveWorkbook.Application.Caption but I can’t customize this property.

Community's user avatar

asked Jan 13, 2015 at 14:02

Liniel's user avatar

0

The answers given here already may work in limited situations, but are certainly not the best way to go about it. Don’t reinvent the wheel. The File System Object in the Microsoft Scripting Runtime library already has a method to do exactly this. It’s called GetBaseName. It handles periods in the file name as is.

Public Sub Test()

    Dim fso As New Scripting.FileSystemObject
    Debug.Print fso.GetBaseName(ActiveWorkbook.Name)

End Sub

Public Sub Test2()

    Dim fso As New Scripting.FileSystemObject
    Debug.Print fso.GetBaseName("MyFile.something.txt")

End Sub

Instructions for adding a reference to the Scripting Library

Community's user avatar

answered Jan 13, 2015 at 14:51

RubberDuck's user avatar

RubberDuckRubberDuck

11.7k4 gold badges50 silver badges95 bronze badges

9

Simple but works well for me

FileName = ActiveWorkbook.Name 
If InStr(FileName, ".") > 0 Then 
   FileName = Left(FileName, InStr(FileName, ".") - 1) 
End If

Petter Friberg's user avatar

answered Apr 19, 2017 at 7:39

Ifca's user avatar

IfcaIfca

1711 silver badge2 bronze badges

3

Using the Split function seems more elegant than InStr and Left, in my opinion.

Private Sub CommandButton2_Click()


Dim ThisFileName As String
Dim BaseFileName As String

Dim FileNameArray() As String

ThisFileName = ThisWorkbook.Name
FileNameArray = Split(ThisFileName, ".")
BaseFileName = FileNameArray(0)

MsgBox "Base file name is " & BaseFileName

End Sub

answered Jan 25, 2019 at 12:07

Bob Nightingale's user avatar

1

This gets the file type as from the last character (so avoids the problem with dots in file names)

Function getFileType(fn As String) As String

''get last instance of "." (full stop) in a filename then returns the part of the filename starting at that dot to the end
Dim strIndex As Integer
Dim x As Integer
Dim myChar As String

strIndex = Len(fn)
For x = 1 To Len(fn)

    myChar = Mid(fn, strIndex, 1)

    If myChar = "." Then
        Exit For
    End If

    strIndex = strIndex - 1

Next x

getFileType = UCase(Mid(fn, strIndex, Len(fn) - x + 1))

End Function

answered Feb 20, 2019 at 16:05

Jeremy Smith's user avatar

You could always use Replace() since you’re performing this on the workbook’s Name, which will almost certainly end with .xlsm by virtue of using VBA.

Using ActiveWorkbook per your example:

Replace(Application.ActiveWorkbook.Name, ".xlsm", "")

Using ThisWorkbook:

Replace(Application.ThisWorkbook.Name, ".xlsm", "")

answered Nov 29, 2020 at 3:29

David Metcalfe's user avatar

David MetcalfeDavid Metcalfe

2,1471 gold badge27 silver badges43 bronze badges

0

This thread has been very helpful to me lately. Just to extend on the answer by @RubberDuck, the File System Object in the Microsoft Scripting Runtime library is already there to achieve this. Also if you define it as an Object as below, it will save you the hassle of having to enable ‘Microsoft Scripting Runtime’ in VBA Tools > References:

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Debug.Print fso.GetBaseName(ActiveWorkbook.Name)

In this way it will return name of the ActiveWorkbook without extension.

There is another way by using INSTRREV function as below:

Dim fname As String
fname = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".") - 1)
MsgBox fname

Both will return the same result. Also in both of the methods above, they will retain any full-stops in the file name and only get rid of the last full-stop and the file extension.

answered Jun 29, 2022 at 18:02

nnaitik's user avatar

To be verbose it the removal of extension is demonstrated for
workbooks.. which now have a variety of extensions .
. a new unsaved Book1 has no ext
. works the same for files

Function WorkbookIsOpen(FWNa$, Optional AnyExt As Boolean = False) As Boolean

Dim wWB As Workbook, WBNa$, PD%
FWNa = Trim(FWNa)
If FWNa <> "" Then
    For Each wWB In Workbooks
        WBNa = wWB.Name
        If AnyExt Then
            PD = InStr(WBNa, ".")
            If PD > 0 Then WBNa = Left(WBNa, PD - 1)
            PD = InStr(FWNa, ".")
            If PD > 0 Then FWNa = Left(FWNa, PD - 1)
            '
            ' the alternative of using split..  see commented out  below
            ' looks neater but takes a bit longer then the pair of instr and left
            ' VBA does about 800,000  of these small splits/sec
            ' and about 20,000,000  Instr Lefts per sec
            ' of course if not checking for other extensions they do not matter
            ' and to any reasonable program
            ' THIS DISCUSSIONOF TIME TAKEN DOES NOT MATTER
            ' IN doing about doing 2000 of this routine per sec

            ' WBNa = Split(WBNa, ".")(0)
            'FWNa = Split(FWNa, ".")(0)
        End If

        If WBNa = FWNa Then
            WorkbookIsOpen = True
            Exit Function
        End If
    Next wWB
End If

End Function

Daniel L. VanDenBosch's user avatar

answered Jan 29, 2017 at 21:44

Harry S's user avatar

Harry SHarry S

4616 silver badges5 bronze badges

I use a macro from my personal.xlsb and run it on both xlsm and xlsx files so a variation on David Metcalfe’s answer that I use is

Dim Wrkbook As String

Wrkbook = Replace(Application.ActiveWorkbook.Name, «.xlsx», «.pdf»)

Wrkbook = Replace(Application.ActiveWorkbook.Name, «.xlsm», «.pdf»)

answered Apr 6, 2021 at 14:04

Vulka's user avatar

VulkaVulka

134 bronze badges

Here is a solution if you do not want to use FSO.
There were some similar answers before, but here some checks are done to handle multiple dots in name and name without extension.

Function getFileNameWithoutExtension(FullFileName As String)

    Dim a() As String
    Dim ext_len As Integer, name_len As Integer


    If InStr(FullFileName, ".") = 0 Then
       getFileNameWithoutExtension = FullFileName
       Exit Function
    End If
    
    a = Split(ActiveWorkbook.Name, ".")
    ext_len = Len(a(UBound(a))) 'extension length (last element of array)
    name_len = Len(FullFileName) - ext_len - 1 'length of name without extension and a dot before it
    getFileNameWithoutExtension = Left(FullFileName, name_len)
    
End Function

Sub test1() 'testing the function
 MsgBox (getFileNameWithoutExtension("test.xls.xlsx")) ' -> test.xls
 MsgBox (getFileNameWithoutExtension("test")) ' -> test
 MsgBox (getFileNameWithoutExtension("test.xlsx")) ' -> test
End Sub

answered May 2, 2022 at 16:37

Leo's user avatar

LeoLeo

4203 silver badges18 bronze badges

strTestString = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))

full credit: http://mariaevert.dk/vba/?p=162

answered Jan 13, 2015 at 14:20

bp_'s user avatar

bp_bp_

4024 silver badges14 bronze badges

9

5 / 5 / 1

Регистрация: 14.03.2011

Сообщений: 55

1

Как убрать расширение файла, и отображать толко имя файла?

15.03.2011, 14:51. Показов 17489. Ответов 5


Студворк — интернет-сервис помощи студентам

Подскажите как убрать расширение файла?

грубо говоря имеем:

dim a as string
a = fail.name

«a» отображается как «****.txt» как сделать, чтобы отображалось только само имя файла? — «***» ??



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

15.03.2011, 14:51

Ответы с готовыми решениями:

Как вытащить из ini-файла имя файла?
Кто знает, помогите плз.
В макросе под Excel надо вытащить из ini-файла имя файла, чтобы потом его…

Ввести имя файла (с расширением) и заменить его на расширение «.exe»
Ввести имя файла( с расширением )и Заменить его на расширение &quot;.exe&quot;

Помогите кто чем может)

Дана строка, содержащая полное имя файла. Выделить из этой строки имя и расширение файла
дана строка, содержащая полное имя файла, т.е. имя диска, список каналов(путь), собственно имя и…

Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить из строки только имя первого католога
Помогите пожалуйста!!!

Залание: Дано полное имя файла, т.е путь к файлу, имя и расширение….

5

695 / 236 / 18

Регистрация: 17.01.2011

Сообщений: 583

Записей в блоге: 1

15.03.2011, 15:08

2

Вот так. Но работает с расширением из трёх букв.

s = «Филипс.pdf»
s = Mid(s, 1, Len(s) — 4)

Если файл имеет расширение из 4-х букв например: «Сравнение адресов.xlsm» , надо вместо 4 написать написать 5.

s = «Сравнение адресов.xlsm»
s = Mid(s, 1, Len(s) — 5)



1



84 / 82 / 2

Регистрация: 12.03.2011

Сообщений: 560

15.03.2011, 15:20

3

Не понятно-зачем это нужно-расширение файла характеризует свойство файла в системе.
Убрав расширение ,файл становится не сопоставим в системе и нечитается ни одной программой.
В чем замысел убрать расширение,а оставить одно имя?



0



gaw

6644 / 1511 / 169

Регистрация: 09.01.2010

Сообщений: 4,298

15.03.2011, 15:31

4

Visual Basic
1
Mid(s, 1, Len(s) - InStr(1, StrReverse(s), "."))



2



Ципихович Эндрю

1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

15.03.2011, 15:58

5

Цитата
Сообщение от solomonov
Посмотреть сообщение

Не понятно-зачем это нужно-расширение файла характеризует свойство файла в системе.
Убрав расширение ,файл становится не сопоставим в системе и нечитается ни одной программой.
В чем замысел убрать расширение,а оставить одно имя?

Не правильный подход, говорит юзер надо, значит надо:

PureBasic
1
2
3
4
Полное_имя_файла_с_расширением_и_местом_его_нахождения = ActiveDocument.FullName
Имя_файла_с_расширением = ActiveDocument.Name
Имя_файла_без_расширения = CreateOb-ject("Scripting.FileSystemObject").GetBaseName(ActiveDocument.Name)
Расширение_файла = CreateOb-ject("Scripting.FileSystemObject").GetExtensionName(ActiveDocument)

Добавлено через 4 минуты
что то правка не работает, одним словом вместо
CreateOb-ject
надо
CreateObject



1



5 / 5 / 1

Регистрация: 14.03.2011

Сообщений: 55

15.03.2011, 17:52

 [ТС]

6

Цитата
Сообщение от solomonov
Посмотреть сообщение

Не понятно-зачем это нужно-расширение файла характеризует свойство файла в системе.
Убрав расширение ,файл становится не сопоставим в системе и нечитается ни одной программой.
В чем замысел убрать расширение,а оставить одно имя?

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

например открываю файл 123.тхт и копирую из него данные во вновь созданный лист 123

может это можно было сделать и другим способом, но у меня возникла такая мысль..

Добавлено через 1 час 19 минут
Спасибо товарищи, оба способа работают безупречно



0



Like this post? Please share to your friends:
  • Vba excel имя файла путь к файлу
  • Vba excel имя файла в папке
  • Vba excel изменить цвет кнопки
  • Vba excel изменить формулу в ячейке
  • Vba excel имя текущего файла