I have code that extracts the full path of a file, minus the extension, and I’m trying to modify it to only store the name of the file, once again without the extension.
Sub ShowFilename()
Dim pathName As String
With ActiveDocument
If Len(.Path) = 0 Then
.Save
End If
If Right(.Name, 1) = "x" Then
pathName = Left$(.FullName, (Len(.FullName) - 5))
Else
pathName = Left$(.FullName, (Len(.FullName) - 4))
End If
End With
MsgBox pathName
End Sub
This displays C:Userstest
, and the document’s name is test.docm
. How can I modify this to only display the filename? Do I need to split the string along and extract the last part?
asked Jul 19, 2012 at 16:05
Sub ShowFilename()
Dim pathName As String
Dim o As Document
Set o = ActiveDocument
If InStrRev(o.Name, ".") <> 0 Then
MsgBox Left(o.Name, InStrRev(o.Name, ".") - 1)
Else
MsgBox o.Name
End If
End Sub
I initially posted this without the if, which would error if the file had never been saved, or had no extension.
answered Jul 19, 2012 at 16:15
As I was not able write code using FSO (isn’t it only for VB, is it?), I wrote this one, quite self explanatory
Dim oldFilename As String
oldFilename = ActiveDocument.Name
If Right(oldFilename, 5) = ".docx" Then
MsgBox ("subtract .docx")
oldFilename = Left(oldFilename, Len(oldFilename) - 5)
ElseIf Right(oldFilename, 4) = ".doc" Then
MsgBox ("subtract .doc")
oldFilename = Left(oldFilename, Len(oldFilename) - 4)
Else
MsgBox ("no extension yet")
End If
answered Jan 21, 2014 at 23:02
1
Yeish, I wouldn’t do it like that!
Hypothetically, you have a whole folders worth of word and you don’t need the extensions, you just want the names. What you would do is go through the word docs and parse them through this function with the type of extension you want removed from the file name
Function removeExtension(myDoc as Document, extension as String)
Dim documentWithoutExtension as String
documentWithoutExtension = replace(myDoc.Name, extension, "")
removeExtension = documentWithoutExtension
End Function
egor.zhdan
4,5156 gold badges42 silver badges53 bronze badges
answered Aug 28, 2015 at 10:00
This one works for me.
Sub ShowFilename()
MsgBox ActiveWindow.Parent
End Sub
answered Oct 4, 2017 at 23:56
An easy way would be:
Sub Test1()
Dim DocName As Document
Set DocName = ActiveDocument
end sub
Paul Roub
36.3k27 gold badges82 silver badges92 bronze badges
answered Apr 26, 2019 at 16:41
‘[/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]
|
|
|
Популярные разделы FAQ: Общие вопросы Особенности VBA-кода Оптимизация VBA-кода Полезные ссылки
1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
как получить имя текущего открытого файла?
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Junior Рейтинг (т): 1 |
Уважаемые форумчане, знаю в ВБА функция CurDir возвращает строковый параметр, определяющий текущую директорию файла. А есть ли функция возвращающая просто имя текущего открытого документа? (например, документа с расширением xls) |
Old Bat |
|
Moderator Рейтинг (т): 128 |
ActiveWorkbook.Name |
goodass |
|
Junior Рейтинг (т): 1 |
2 Old Bat добавлено |
Alex77 |
|
Full Member Рейтинг (т): 20 |
Myfle = Dir(DIRECTORY & «» & NAME & «.xml» ) ‘ Проверяем наличие файла If Myfle = «» Then ‘код если нет End If |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- VB for Application
- Следующая тема
[ Script execution time: 0,0321 ] [ 16 queries used ] [ Generated: 14.04.23, 17:32 GMT ]
Обычно мы можем вставить имя файла или путь и имя файла в документ Word с помощью функции поля Filename, но это вставленное имя файла включает расширение файла docx или doc. Как вы могли вставить имя файла или путь и имя файла без расширения?
Вставьте путь к файлу и имя или имя файла без расширения, используя код VBA
Вставьте путь к файлу и имя или имя файла без расширения, используя код VBA
Чтобы вставить имя файла без расширения в документ Word, примените следующий код VBA:
1. Поместите курсор в то место, куда вы хотите вставить путь и имя файла без расширения.
2. Затем зажмите ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
3. А затем нажмите Вставить > Модули, скопируйте и вставьте приведенный ниже код в открытый пустой модуль.
Код VBA: вставить путь и имя файла без расширения:
Sub InsertFileNameAndPath()
Dim xPathName As String
Dim xDotPos As Integer
With Application.ActiveDocument
If Len(.Path) = 0 Then .Save
xDotPos = VBA.InStrRev(.FullName, ".")
xPathName = VBA.Left(.FullName, xDotPos - 1)
End With
Application.Selection.TypeText xPathName
End Sub
4, Затем нажмите F5 ключ для запуска этого кода, а путь и имя файла были вставлены в документ без расширения, см. снимок экрана:
Внимание: Если вы просто хотите вставить в документ имя файла без расширения, вы должны применить этот код:
Код VBA: вставить только имя файла без расширения:
Sub InsertFileNameOnly()
Dim xPathName As String
Dim xDotPos As Integer
With Application.ActiveDocument
If Len(.Path) = 0 Then .Save
xDotPos = VBA.InStrRev(.Name, ".")
xPathName = VBA.Left(.Name, xDotPos - 1)
End With
Application.Selection.TypeText xPathName
End Sub
Рекомендуемые инструменты для повышения производительности Word
Kutools For Word — Более 100 расширенных функций для Word, сэкономьте 50% времени
- Сложные и повторяющиеся операции можно производить разово за секунды.
- Вставляйте сразу несколько изображений из папок в документ Word.
- Объединяйте и объединяйте несколько файлов Word из папок в одну в желаемом порядке.
- Разделите текущий документ на отдельные документы в соответствии с заголовком, разрывом раздела или другими критериями.
- Преобразование файлов между Doc и Docx, Docx и PDF, набор инструментов для общих преобразований и выбора и т. Д.
Комментарии (0)
Оценок пока нет. Оцените первым!
Автор Heleno4ka, 24 апреля 2018, 11:52
У меня есть макрос, который сохраняет файл. Как подставить в имя файла данные из первой строки?
Администратор
- Administrator
- Сообщения: 2,252
- Записан
В ворде есть такое понятие «абзац». Слышали об этом?
В конце абзаца есть невидимый символ «знак абзаца», который видно, когда включён режим непечатаемых символов?
Да, я знаю, что такое абзац в ворд-файле.
Администратор
- Administrator
- Сообщения: 2,252
- Записан
Может быть удобнее будет извлекать данные не из первой строки, а из первого абзаца?
В ворде со строками из макроса сложнее работать, чем с абзацами, т.к. в VBA нет объекта «строка файла», но есть объект «абзац».
Первый абзац в моём файле — это одна строка. Тогда гораздо проще использовать абзац.
Администратор
- Administrator
- Сообщения: 2,252
- Записан
Тогда вам нужно извлечь данные из первого абзаца файла, например, в переменную, а затем переменную вы сможете подставить туда, куда надо.
Sub макрос()
Dim var
‘ Копирование первого абзаца из активного файла в переменную «var».
var = ActiveDocument.Paragraphs(1).Range.Text
‘ Удаление из переменной знака абзаца.
var = Left(var, Len(var) — 1)
End Sub
И добавить в SaveAs2 FileName…Paragraphs(1).Range.Text?
Администратор
- Administrator
- Сообщения: 2,252
- Записан
На конце абзаца есть символ «знак абзаца», он может помешать, а может нет, надо тестировать.
Поэтому может быть сначала потребуется записать текст абзаца в переменную, чтобы удалить знак абзаца, а затем уже подставляйте переменную в нужное место.
Ура-ура-ура, работает!!!
Спасибо, добрый волшебник! Пусть у Вас всё будет замечательно!
newdoc.SaveAs «C:» & «Информация для_» & var & «.docx»
- Форум по VBA, Excel и Word
-
►
Word -
►
Макросы в Word -
►
Word VBA Макросы: Как подставить в имя файла данные из первой строки?