Vba word имя файла

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

Ricardo Altamirano's user avatar

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

Daniel's user avatar

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

Mad VBA Coder's user avatar

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's user avatar

egor.zhdan

4,5156 gold badges42 silver badges53 bronze badges

answered Aug 28, 2015 at 10:00

Ben Segar's user avatar

This one works for me.

Sub ShowFilename()
MsgBox ActiveWindow.Parent
End Sub

answered Oct 4, 2017 at 23:56

Shane Sibbett's user avatar

An easy way would be:

Sub Test1()
Dim DocName As Document
Set DocName = ActiveDocument
end sub

Paul Roub's user avatar

Paul Roub

36.3k27 gold badges82 silver badges92 bronze badges

answered Apr 26, 2019 at 16:41

MWCA44's user avatar

‘[/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]

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки


    1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
    2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
    3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
    4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.

    >
    как получить имя текущего открытого файла?

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    02.03.09, 19:22

      Junior

      *

      Рейтинг (т): 1

      Уважаемые форумчане, знаю в ВБА функция CurDir возвращает строковый параметр, определяющий текущую директорию файла. А есть ли функция возвращающая просто имя текущего открытого документа? (например, документа с расширением xls)

      Profi

      Old Bat



      Сообщ.
      #2

      ,
      02.03.09, 19:35

        Moderator

        *****

        Рейтинг (т): 128

        ActiveWorkbook.Name
        ActiveDocument.Name


        goodass



        Сообщ.
        #3

        ,
        02.03.09, 21:38

          Junior

          *

          Рейтинг (т): 1

          2 Old Bat
          Спасибо!

          добавлено
          появилась следующая проблемка —
          допустим требуется проверить — существует ли файл с именем NAME в директории DIRECTORY (NAME и DIRECTORY — переменные)
          грубо говоря — как проверить существует ли в папке c: файл с именем test.xml ?
          спасибо


          Alex77



          Сообщ.
          #4

          ,
          02.03.09, 21:52

            Full Member

            ***

            Рейтинг (т): 20

            ExpandedWrap disabled

              Myfle = Dir(DIRECTORY & «» & NAME & «.xml» ) ‘ Проверяем наличие файла

              If Myfle = «» Then

              ‘код если нет

              End If

            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

            0 пользователей:

            • Предыдущая тема
            • VB for Application
            • Следующая тема

            Рейтинг@Mail.ru

            [ 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 ключ для запуска этого кода, а путь и имя файла были вставлены в документ без расширения, см. снимок экрана:

            документ вставить имя файла без расширения 1

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

            Код 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 word kutools tab 1180x121

            выстрел kutools word kutools plus tab 1180x120

            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 Макросы: Как подставить в имя файла данные из первой строки?

            Like this post? Please share to your friends:
          • Vba word изменить цвет текста
          • Vba word значения таблицы
          • Vba word знак абзаца
          • Vba word защита документа
          • Vba word заполнение таблиц