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

    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,0198 ]   [ 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)


            Оценок пока нет. Оцените первым!

            0 / 0 / 0

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

            Сообщений: 5

            1

            Команда на название вордовского файла

            20.01.2015, 11:25. Показов 2038. Ответов 8


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

            Есть БД в экселе и шаблон «ДОГОВОР.doc» в ворде. Из экселя через макрос подставляются данные в ворд. Нужно чтобы конечный ворд файл сохранялся в виде «ДОГОВОР1.doc» ; «ДоговорX.doc», где «х» — номер ячейки из экселя.
            В макросе строчка objDoc.SaveAs Filename:=path_f & «» & FName
            но сохраняет он x.doc, где х — номер ячейки экселя.



            0



            SoftIce

            es geht mir gut

            11264 / 4746 / 1183

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

            Сообщений: 11,437

            20.01.2015, 11:29

            2

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

            objDoc.SaveAs Filename:=path_f & «» & FName

            Visual Basic
            1
            
            objDoc.SaveAs Filename:=path_f & "Договор" & FName



            0



            0 / 0 / 0

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

            Сообщений: 5

            20.01.2015, 11:31

             [ТС]

            3

            а можно сделать в виде YX.doc, где — y — название шаблона, а x — значение ячейки выделенной в экселе?



            0



            Апострофф

            Заблокирован

            20.01.2015, 11:35

            4

            Что есть

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

            х — номер ячейки экселя

            ? Может номер строки с данными, подставленными в ворд?
            Сохранение в цикле? Уточняйте задачу, приведите макрос целиком.

            Добавлено через 2 минуты

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

            сделать в виде YX.doc, где — y — название шаблона, а x — значение ячейки выделенной в экселе

            Visual Basic
            1
            
            objDoc.SaveAs Filename:=path_f & "" & Y & selection & ".doc"



            0



            dry154

            0 / 0 / 0

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

            Сообщений: 5

            20.01.2015, 11:42

             [ТС]

            5

            Visual Basic
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            
            Sub Generator()
            Dim ObWord As Word.Application
            Dim objDoc As Word.Document
            Dim file As String
            Set ob1 = ActiveWorkbook.ActiveSheet ' теперь переменная ob1 будет содержать ссылку на текущий лист активной книги
            f_r = Selection.Row ' определяем номер выбранной строки
            stb = Selection.Column ' определяем номер выбранного столбца
            f_c = Selection.CurrentRegion.Columns(Selection.CurrentRegion.Columns.Count).Column ' определяем номер последнего столбца в данной таблице
            path_f = ThisWorkbook.Path 'определяем текущую папку
            file = Application.GetOpenFilename("Excel Files (*.docx;*.doc), *docx;*.doc") ' открывается диалоговое окно "Открытие документа"
            If Dir(file) = Empty Then
                Exit Sub
            Else
            ' запускаем Word, открываем выбранный документ
            Set ObjWord = CreateObject("Word.Application")
                With ObjWord
                    .Visible = True
                    .Documents.Open Filename:=file
                    Set objDoc = .ActiveDocument
                End With
            With objDoc.Range
            For j = 1 To f_c ' цикл по всем столбцам таблицы
                isk_zn = ob1.Cells(1, j) 'искомое значение - находится в первой строке нашей таблицы
                zamen_zn = ob1.Cells(f_r, j) 'значение для замены
                .Find.ClearFormatting
                .Find.Replacement.ClearFormatting
                'осуществляем замену
                With .Find
                    .Text = isk_zn
                    .Replacement.Text = zamen_zn
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = False
                    .MatchCase = False
                    .MatchWholeWord = True
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                .Find.Execute Replace:=wdReplaceAll
            Next j
            ' сохраняем документ в том же месте что и книга с макросом, имя документа - значение из выделенной ячейки
            FName = ob1.Cells(f_r, stb)
            objDoc.SaveAs Filename:=path_f & "" & FName
                objDoc.Close
                ObjWord.Quit
            End With
            Set objDoc = Nothing
            Set ObjWord = Nothing
            ob1.Activate
            End If
            End Sub

            Добавлено через 6 минут

            Цитата
            Сообщение от Апострофф
            Посмотреть сообщение

            1
            objDoc.SaveAs Filename:=path_f & «» & Y & selection & «.doc»

            не работает. создает файл с данными ячейки.doc



            0



            Апострофф

            Заблокирован

            20.01.2015, 11:48

            6

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

            y — название шаблона

            Чьи это слова и чему равен Y?



            0



            0 / 0 / 0

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

            Сообщений: 5

            20.01.2015, 11:49

             [ТС]

            7

            это мои слова, что нужно прописать, чтобы y был равен названию шаблона?) я в синтаксисе ВБА к сожалению ни бум бум.



            0



            Апострофф

            Заблокирован

            20.01.2015, 11:53

            8

            Visual Basic
            1
            
            Y="название шаблона" 'к сожалению, отсюда не видно, как называется ваш шаблон на самом деле.



            0



            0 / 0 / 0

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

            Сообщений: 5

            20.01.2015, 11:59

             [ТС]

            9

            Цитата
            Сообщение от Апострофф
            Посмотреть сообщение

            1
            Y=»название шаблона» ‘к сожалению, отсюда не видно, как называется ваш шаблон на самом деле.

            у меня 1 экселевская БД и 3 шаблона: договор, акт и макет. Мы запускаем макрос 3 раза под каждый вордовский документ, поэтому нужно, чтобы каждый раз новые файлы сохранялись, как «договор1285.doc» или «макет1285.doc»

            *Сделать все в 1 файле неудобно, т.к. договор потом конвертируем в пдф, а макет оставляем в ворде. Акт тоже должен быть отдельным файлом, т.к. мы не можем высылать клиенту акт, не оказав услугу.



            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 конец файла