Имя файла Vba без расширения

Обновлено: 03.07.2024

Вы можете использовать поле FILENAME, чтобы вставить имя файла текущего документа в ваш документ. Точный способ использования этого поля описан в других выпусках WordTips. Вы можете использовать переключатели полей, чтобы указать, хотите ли вы, чтобы результаты поля включали полный путь к файлу. , или не. Однако вы не можете указать одну вещь: хотите ли вы, чтобы результаты исключали расширение файла.

Одним из способов управления этим является настройка Windows на отображение или скрытие расширений файлов. Вы делаете это в самой Windows, отображая папку на жестком диске и выбирая Tools | Параметры папки и отображение вкладки "Вид".

Прокрутите список настроек просмотра и убедитесь, что параметр «Скрыть расширения для известных типов файлов» установлен так, как вам нужно. Если флажок снят, Windows (и Word) всегда отображает расширение файла. Если флажок установлен, расширение файла не отображается.

Этот подход отлично работает, пока документы просматриваются в вашей системе. Если документ открыт в чужой системе, то в поле ИМЯ ФАЙЛА будет отображаться расширение файла в соответствии с настроенной конфигурацией Windows; это может быть недостатком.

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

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

Запустите этот макрос, и имя вашего документа (без расширения файла) будет вставлено перед тем, что выбрано в вашем документе. Макрос проверяет имя документа, а затем удаляет из имени последние четыре символа (точку и расширение файла). Вот что вставлено.

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

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

Биография автора

На его счету более 50 научно-популярных книг и множество журнальных статей. Аллен Уайатт является всемирно признанным автором. Он является президентом Sharon Parq Associates, компании, предоставляющей компьютерные и издательские услуги. Узнайте больше об Аллене.


VBAX Regular Зарегистрирован в июне 2011 г. Сообщений 15 Местоположение

Отображать имя файла без расширения

Итак, я пытаюсь отобразить имя файла в текстовом поле без расширения. Вот код, который я использую для отображения имени файла:

Он отображается вместе с расширением. Есть идеи, как от него избавиться?


Мастер VBAX присоединился к нам в мае 2004 г. Сообщений: 6 713 Местоположение

[vba]Mid(ActiveDocument.Name, 1, Len(ActiveDocument.Name) - 4)[/vba]

Если это docx или docm, используйте -5.

У меня плохая память, поэтому макропод, скорее всего, придумает более короткий путь.


VBAX Regular Зарегистрирован в июне 2011 г. Сообщений 15 Местоположение

Отлично! Спасибо! Я использовал - 5, и он работал отлично.


VBAX Master Присоединился к нам, февраль 2011 г. Сообщений: 1480 Местоположение


VBAX Master Присоединился к нам, февраль 2011 г. Сообщений: 1480 Местоположение


Мастер VBAX присоединился к нам в мае 2004 г. Сообщений: 6 713 Местоположение


VBAX Master Присоединился к нам, февраль 2011 г. Сообщений: 1480 Местоположение

Одна вещь (кроме проблем с оптимизацией строковых функций), с которой я столкнулся, — это необходимость добавления VBA в начале. для всех этих функций из-за проблем с компиляцией в различных средах (так что VBA.Left компилируется корректно, тогда как Left вызывает проблемы с компиляцией), но не только это. что сказал Павел?


Мастер VBAX присоединился к нам в мае 2004 г. Сообщений: 6 713 Местоположение


Утвердитель базы знаний VBAX Guru Зарегистрирован в июле 2008 г. Сообщений 4 323 Местоположение

[VBA]Me.TextBox1 = Split(ActiveDocument.Name,".")(0)[/VBA]
Это будет работать с расширениями файлов любой длины.


VBAX Master Присоединился к нам, февраль 2011 г. Сообщений: 1480 Местоположение

VBAX Sage Присоединился к нам в апреле 2007 г. Сообщений: 8 182 Местоположение

Если имя документа не содержит точек:


Мастер VBAX присоединился к нам в мае 2004 г. Сообщений: 6 713 Местоположение


VBAX Master Присоединился к нам, февраль 2011 г. Сообщений: 1480 Местоположение

Ну, тогда я убежден. Мое решение лучшее.

VBAX Sage Присоединился к нам в апреле 2007 г. Сообщений: 8 182 Местоположение

Если документ не был сохранен, это не удается

[VBA]
Явный параметр
Функция JustTheName (необязательный файл sFile As String = vbNullString) As String

Если Len(sFile) = 0, тогда sFile = ActiveDocument.Name

If i = 0 Then
JustTheName = sFile
Else
JustTheName = Left(sFile, i - 1)
End If
End Function
Подтест()
MsgBox JustTheName

MsgBox JustTheName("c:\My Documents\My Doc.SubCat.SubSubCat.docx")

MsgBox JustTheName("Мои документы\Мой документ.SubCat.SubSubCat.docx")
End Sub
[/VBA]


Мастер VBAX присоединился к нам в мае 2004 г. Сообщений: 6 713 Местоположение

Хммммм. ИМХО, любой, кто использует несколько точек в имени файла, заслуживает того, чтобы его испортили. Это просто неудачное название.


Утвердитель базы знаний VBAX Guru Зарегистрирован в июле 2008 г. Сообщений 4 323 Местоположение

Первоначальное сообщение от fumei

Хмммм. ИМХО, любой, кто использует несколько точек в имени файла, заслуживает того, чтобы его испортили. Это просто неудачное название.

Согласен. Это также метод, который использовали люди, желающие распространять вредоносные файлы — просто дайте исполняемому файлу имя, например, somedocument.docx.exe, и когда пользователь, думая, что это документ, дважды щелкнет его, чтобы открыть, он запустится. Особенно опасно для тех пользователей, у которых Windows настроена (по умолчанию) не показывать расширения известных типов файлов.


VBAX Master Присоединился к нам, февраль 2011 г. Сообщений: 1480 Местоположение

Я часто просто использовал тест.

[vba]
If ActiveDocument.Name = ActiveDocument.FullName Then
'документ еще нигде не был сохранен
Else
'документ был сохранен в какой-то момент
/>End If
[/vba]
Очевидно, что это можно оптимизировать с помощью Len, но я оптимизирую только тогда, когда это важнее, чем удобство чтения.

Поскольку .FullName дает путь и имя, это мой стандартный тест, чтобы увидеть, есть ли путь. Также можно проверить, равен ли .Path vbnullstring и т. д. Множество разных подходов. но Paul_Hossler делает хороший вывод, хотя и не обязательно тот, который рассматривается OP, поскольку в несохраненном документе нет расширения файла.

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

Еще раз, в моей карьере программиста мне неоднократно приходилось извлекать имя файла из полного «путь/имя файла.расширение», но только имя файла без расширения. Ниже приведена очень простая функция для этого.

'---------------------------------------------------------------------------- ----------------------------------------- ' Процедура : GetFileNameWOExt ' Автор : Даниэль Пино , CARDA Consultants Inc. ' Веб-сайт : http://www.cardaconsultants.com ' Цель : Возврат имени файла без расширения из пути\имени файла ' Авторское право : Нижеследующее является выпуском Attribution-ShareAlike 4.0 International '(CC BY- SA 4.0) — https://creativecommons.org/licenses/by-sa/4.0/ ' Req'd Refs: None required ' ' Входные переменные: ' ~~~~~~~~~~~~~~~~~ ' strFileWPath - строка пути и имени файла (например: "c:\temp\ test.xls") ' ' Использование: ' ~~~~~~~~ ' ? GetFileNameWOExt("C:\temp\test.xls") ' -> test ' ? GetFileNameWOExt("C:\Users\Dev\Desktop\My Database V1.000.accdb") ' -> My Database V1.000 ' ' История изменений: ' Дата версии (гггг/мм/дд) Описание ' **** ******************************************************* ********************************* ' 1 24 февраля 2012 г. Первоначальный выпуск ' 2 24 апреля 2020 г. Обновление до учет имен файлов с точками в них ' Обновлен заголовок функции '---------------------------------------------------- -------------------------------------------------- Функция GetFileNameWOExt(ByVal strFileWPath As String) On Error GoTo Error_Handler GetFileNameWOExt = Right(strFileWPath, Len(strFileWPath) - InStrRev(strFileWPath, "\")) GetFileNameWOExt = Left(GetFileNameWOExt, InStrRev(GetFileNameWOExt, ".") - 1) Error_Handler_Handler_Handler_Handler_Handler_Handler_Handler_Handler_Handler : On Error Resume Next Exit Function Error_Handler: MsgBox "Произошла следующая ошибка" & vbCrLf & vbCrLf & _ "Номер ошибки: " & Err.Number & vbCrLf & _ "Источник ошибки: GetFileNameWOExt" & vbCrLf & _ "Описание ошибки: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0 , vbCrLf & "Line No: " & Erl) _ , vbOKOnly + vbCritical, "Произошла ошибка!" Возобновление функции завершения Error_Handler_Exit

3 ответа на тему «MS Access — VBA — определить имя файла без расширения»

потрясающе, спасибо.
Я изменил InStr на InStrRev, и это позволяет мне иметь номер версии. в имени моего приложения в пути к файлу, т. е. Planning Reports v4.4

Как насчет версии, которая не только обрабатывает имена файлов, содержащие несколько точек, но и может при необходимости возвращать имя файла, включая расширение:

Функция fnGetFileName(ByVal strFileWPath As String, необязательный blnExcludeExt As Boolean) As String
При ошибке GoTo ErrHandler
strProcName = “fnGetFileName()”
fnGetFileName = Right(strFileWPath, Len(strFileWPath ) – InStrRev(strFileWPath, “\”))
If Not blnExcludeExt Then
GoTo ExitGetFileNameWOExt
End If 'иначе удалить расширение.
fnGetFileName = Left(fnGetFileName, InStrRev(fnGetFileName, «.») — 1)

ExitGetFileNameWOExt:
Выход из функции
ErrHandler:
и т. д.

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

Оставить ответ Отменить ответ

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

Об авторе

Домашняя страница

Даниэль Пино — владелец компании CARDA Consultants Inc. Уже более 15 лет эта фирма специализируется в основном на разработке индивидуальных ИТ-решений для бизнеса, начиная от баз данных, автоматизированных рабочих книг и документов, веб-сайтов и веб-приложений. Постоянный участник многих форумов, включая Experts-Exchange, UtterAccess, Microsoft Answers и Microsoft MSDN, где он помогает огромному количеству людей с их различными ИТ-проблемами. Дэниел ежегодно получает награду Microsoft MVP с 2010 года, является признанным VIP-пользователем UtterAccess и получил множество наград от Experts-Exchange.

Последние записи

  • Надежный отправитель домена Outlook не работает
  • Самовосстанавливающиеся переменные объекта
  • Power Automate отправил электронное письмо, не видя переменных
  • Давайте поговорим обо всех этих ошибках!
  • LinkedIn Остановите СПАМ
  • Доступ к DevCon 2022 уже здесь!
  • Определить, является ли таблица локальной или нет
  • Доступ к новостям – новое видео
  • Как отфильтровать существующий набор записей
  • Больше не использовать CDO с GMail

Категории

Архивы

DevHut любезно предоставлен компанией CARDA Consultants Inc.

Все образцы кода, файлы для загрузки, ссылки и т. д. на этом сайте предоставляются «КАК ЕСТЬ» и без каких-либо гарантий. Вы принимаете на себя риски, если решите попробовать какой-либо код, примеры и т. д., представленные на этом сайте.

Обзор конфиденциальности


Участник форума Регистрация 03.12.2014 Местоположение Индия MS-Off Ver 2007, 2010, 2013, 2016, 365 (все еще учится. ) Сообщений 293

Получить выбранное имя файла без расширения

Привет всем,
Доброе утро

У меня есть следующий код для импорта CSV-файла, и теперь я хочу, чтобы имя файла без расширения указанного файла данных было в следующем столбце импортированного файла

а именно. Если я выберу sample43.csv, то в последнем столбце, где заканчивается столбец данных ИЛИ в столбце Z, мне нужно имя файла, т.е. sample43

Ваше решение сведет к минимуму мои усилия. Заранее спасибо

Гуру форума Дата регистрации 03.10.2012 Местоположение Антверпен, Бельгия MS-Off Ver MO Prof Plus 2016 Сообщений 6 901

Вы можете использовать это, чтобы извлечь имя файла без расширения из strFile.

Избегайте использования Select, Selection и Activate в коде. Использовать с . Конец с вместо этого.
Вы можете выразить признательность тем, кто вам помог, нажав * в левом нижнем углу любого из их сообщений.


Участник форума Регистрация 03.12.2014 Местоположение Индия MS-Off Ver 2007, 2010, 2013, 2016, 365 (все еще учится. ) Сообщений 293

Спасибо за ответ,
Но мне нужно имя файла выбранного файла csv после того, как я получил данные файла csv в другом файле xls, т.е. согласно моему коду

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

Я не знаком с vba.


Участник форума Регистрация 03.12.2014 Местоположение Индия MS-Off Ver 2007, 2010, 2013, 2016, 365 (все еще учится. ) Сообщений 293

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

Мне нужно имя файла в следующем столбце ИЛИ в столбце Z

Гуру форума Дата регистрации 03.10.2012 Местоположение Антверпен, Бельгия MS-Off Ver MO Prof Plus 2016 Сообщений 6 901


Участник форума Регистрация 03.12.2014 Местоположение Индия MS-Off Ver 2007, 2010, 2013, 2016, 365 (все еще учится. ) Сообщений 293

Гуру форума Дата регистрации 03.10.2012 Местоположение Антверпен, Бельгия MS-Off Ver MO Prof Plus 2016 Сообщений 6 901

Читайте также: