Путь к файлу vba word

I have a Word document that is already saved and I need to get its existing save directory and/or full file path (i.e. C:UsersPublicDocumentstestDoc.docx).

How can this be acquired from a macro/VBA?

Deduplicator's user avatar

Deduplicator

44.3k7 gold badges65 silver badges115 bronze badges

asked Jun 10, 2013 at 19:55

ikathegreat's user avatar

5

ActiveDocument.FullName

The above gives the full path to the document, including the file name.

ActiveDocument.Path

The above gives the directory where your document is saved.

ActiveDocument.Name

The above gives the name of the document, without path information.

answered Jun 10, 2013 at 20:04

shahkalpesh's user avatar

shahkalpeshshahkalpesh

33k3 gold badges67 silver badges88 bronze badges

title keywords f1_keywords ms.prod api_name ms.assetid ms.date ms.localizationpriority

Application.Path property (Word)

vbawd10.chm158335057

vbawd10.chm158335057

word

Word.Application.Path

224b4c66-f49c-55f1-8b6b-74f5ed979a3d

06/08/2017

medium

Application.Path property (Word)

Returns the disk or Web path to the specified object. Read-only String.

Syntax

expression.Path

expression A variable that represents an Application object.

Remarks

The path doesn’t include a trailing character — for example, «C:MSOffice» or «https://MyServer». Use the PathSeparator property to add the character that separates folders and drive letters. Use the Name property of the Document object to return the file name without the path and use the FullName property to return the file name and the path together.

[!NOTE]
Use the PathSeparator property to build web addresses even though they contain forward slashes (/) and the PathSeparator property defaults to a backslash ().

Example

This example displays the path and file name of the active document.

MsgBox ActiveDocument.Path & Application.PathSeparator & _ 
 ActiveDocument.Name

This example changes the current folder to the path of the template attached to the active document.

ChDir ActiveDocument.AttachedTemplate.Path

This example displays the path of the first add-in in the AddIns collection.

If AddIns.Count >= 1 Then MsgBox AddIns(1).Path

See also

Application Object

[!includeSupport and feedback]

Mojakhed

0 / 0 / 0

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

Сообщений: 13

1

Как получить путь к файлу и имя этого файла в переменные

23.10.2012, 11:58. Показов 89772. Ответов 22

Метки нет (Все метки)


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

Добрый день,

Задача проста, есть решение, но оно не изящное, хотелось бы оптимизировать код. Все делается в VBA Excel 2010.
Необходимо выбирая случайный фаил получать полный путь к этому файлу, а так же его имя в отдельные переменные. У меня это получилось сделать только в 2 этапа, т.е 2 раза выводя диалоговое окно. Хотелось бы это делать за 1 диалог.

1. Получаем Имя файла

Visual Basic
1
2
3
4
Set fs = CreateObject("Scripting.FileSystemObject")
fName = Application.GetOpenFilename
s = fs.GetFileName(fName)
MsgBox s, vbInformation + vbOKOnly

2. Получаем Путь к файлу (код не мой, помог Гугл)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Function GetFolderPath(Optional ByVal Title As String = "Select Folder", _
                       Optional ByVal InitialPath As String = "c:") As String
   Dim PS As String: PS = Application.PathSeparator
    With Application.FileDialog(msoFileDialogFolderPicker)
        If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS
        .ButtonName = "Select": .Title = Title: .InitialFileName = InitialPath
        If .Show <> -1 Then Exit Function
        GetFolderPath = .SelectedItems(1)
        If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS
    End With
End Function
 
Path = GetFolderPath
MsgBox Path, vbInformation + vbOKOnly

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



0



Programming

Эксперт

94731 / 64177 / 26122

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

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

23.10.2012, 11:58

22

Казанский

15136 / 6410 / 1730

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

Сообщений: 9,999

23.10.2012, 12:17

2

fName в первом коде — полный путь к файлу. Вы хотите разделить его на путь к папке и имя?
Это можно сделать так:

Visual Basic
1
2
3
4
5
FullPath = Application.GetOpenFilename
i = InStrRev(FullPath, "") 'позиция последнего 
Name = Mid(FullPath, i + 1)
Folder = Left(FullPath, i - 1)
MsgBox FullPath & vbLf & Name & vbLf & Folder



2



0 / 0 / 0

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

Сообщений: 13

23.10.2012, 15:18

 [ТС]

3

Благодарю, вопрос исчерпан.



0



Hugo121

6875 / 2807 / 533

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

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

23.10.2012, 17:30

4

Так попробуйте в первом коде:

Visual Basic
1
MsgBox fName & vbNewLine & s, vbInformation + vbOKOnly

Получите «полный путь к этому файлу, а так же его имя в отдельные переменные».



0



0 / 0 / 0

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

Сообщений: 13

23.10.2012, 19:14

 [ТС]

5

To Hugo121

Наверное я не достаточно четко сформулировал задачу, в любом случае, Казанский помог с решением проблемы. Я получил что хотел.
Под полным путем подразумевалось путь до файла без его имени, т.е «C:temp» в одну переменную и имя файла «asd.txt» в другую переменную.

В следующий раз буду четко формулировать. Спасибо.



0



Hugo121

6875 / 2807 / 533

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

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

23.10.2012, 20:55

6

Ну когда есть полный путь и имя — легко от полного пути отрезать на длину имени…

Visual Basic
1
2
3
4
5
6
7
Sub tt()
    Set fs = CreateObject("Scripting.FileSystemObject")
    fname = Application.GetOpenFilename
    s = fs.GetFileName(fname)
    ss = Left(fname, Len(fname) - Len(s))
    MsgBox fname & vbLf & ss & vbLf & s, vbInformation, vbOKOnly
End Sub



0



rattrapper

foo();

886 / 587 / 222

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

Сообщений: 1,549

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

09.07.2013, 16:29

7

нужна помощь, у меня код не работает(exel’13)
нашел отличный faq по добавлению модулей,

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

Импорт модуля проекта из файла

Visual Basic
1
ИмяПроекта.VBProject.VBComponents.Import *"Путь и ИмяФайла"

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

Visual Basic
1
2
3
4
5
6
Sub AddMacro()
With ThisWorkbook.VBProject.VBComponents
    .Import "путь к книге???"  Module1.bas
    .Import "путь к книге???"  mw2.frm
End With
End Sub

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

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

никак не могу получить полный путь к книге программно

как же все просто)
кому нужно thisworkbook.path



0



ExpressFX

2 / 2 / 0

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

Сообщений: 1

24.01.2016, 18:54

8

Пути к файлу и имя файла — просто как 2+2 !

Visual Basic
1
2
3
4
5
6
7
Sub ShowPathAndName()
    Dim FullName$, Filename$, FilePath$
    FullName = "C:Worktest.txt"
    Filename = Dir(FullName) ' Сработает только если файл по указанному пути реально существует
    FilePath = Left(FullName, Len(FullName) - Len(Filename))
    MsgBox "Путь к файлу - " & FilePath & vbCrLf & "Имя файла - " & Filename
End Sub

Выйдет сообщение:
Путь к файлу — C:Work
Имя файла — test.txt

Просто и не нужно извращаться!



2



4 / 4 / 0

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

Сообщений: 17

29.01.2016, 13:41

9

ActiveWindow.Caption возвращает имя открытого окна, т.е. имя файла без расширения.



0



Казанский

15136 / 6410 / 1730

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

Сообщений: 9,999

29.01.2016, 15:20

10

Федоров, …если заголовок окна не поменяли

Visual Basic
1
activewindow.Caption="Федоров"



0



0 / 0 / 0

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

Сообщений: 4

18.03.2016, 14:08

11

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



0



Hugo121

6875 / 2807 / 533

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

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

18.03.2016, 14:19

12

Вместо Msgbox пишите

Visual Basic
1
[A1]=

— получите вместо сообщения строку в ячейке.



1



0 / 0 / 0

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

Сообщений: 4

18.03.2016, 15:24

13

благодарю, то что надо

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



0



6875 / 2807 / 533

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

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

18.03.2016, 16:12

14

Используете ДВССЫЛ()? Она не в всех формулах работает. Если всё равно используете макрос — так сразу и формируйте макросом полностью формулы, или вообще делайте всю работу макросом.



0



0 / 0 / 0

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

Сообщений: 4

21.03.2016, 07:20

15

ДВССЫЛ не успользую, а в макросах не силен совсем.
вот формула =[AW104]Данные!$B$18, по которой подтягиваются данные из внешних источников, а ячейка AW104 получает полный путь файла источника по вышеприведенному макросу.



0



Hugo121

6875 / 2807 / 533

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

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

21.03.2016, 09:22

16

Попробуйте после замены файла

Visual Basic
1
 ActiveWorkbook.RefreshAll

или

Visual Basic
1
Calculate



0



0 / 0 / 0

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

Сообщений: 4

21.03.2016, 11:04

17

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



0



6875 / 2807 / 533

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

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

21.03.2016, 11:30

18

Попробуйте так — копируете любой файл клиента под именем например шаблон.xls, настраиваете все нужные формулы на импорт из этого файла.
Сохраняете файл, ставите ему «только для чтения».
Удаляете шаблон.xls.
Юзер открывает файл с формулами, в диалоге обновления связей указывает файл нужного клиента. Посмотрел, если нужно сохранить — сохранил с любым другим именем.
Но можно конечно всё делать макросом — юзер жмёт кнопку, указывает файл, смотрит данные. Вообще всё без формул.



0



Ivan_Ivanovich

0 / 0 / 0

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

Сообщений: 29

14.04.2016, 09:59

19

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

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub SelectStudent_Click()
 
Dim FName As String
Dim result As Integer
With Application.FileDialog(1)
   .Title = "Select file"
   .InitialFileName = "C:BD" 'default path Путь по умолчанию
   .AllowMultiSelect = False
   .Filters.Clear
   .Filters.Add "MS Excel", "*.xlsx", 1
result = .Show
 
If result = 0 Then Exit Sub
FName = Trim(.SelectedItems.Item(1))
End With

А вот продолжение кода в форме, при помощи которого 100% идет выбор файла (только автоматически, по прописанному пути и файлу, а нужно, чтобы можно было любой файл выбрать, чтобы не был заранее прописан код для файла) и уже выполнялась работа с ним.

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim app As Object, wrk As Object
Dim rst As dao.Recordset
 
Set rst = CurrentDb.OpenRecordset("select * from Marks")
Set app = CreateObject("excel.application")
Set wrk = app.workbooks.Open("C:BDsample.xlsx")
 
rst.AddNew
 
rst![mrk_id] = Nz(DMax("mrk_id", "Marks"), 0) + 1
rst![Module] = Modul(app.range("A14"))
rst![Hours] = app.range("C15")
 
 
rst.Update
app.Quit
 
End Sub



0



6875 / 2807 / 533

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

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

14.04.2016, 10:04

20

Т.е. не пробовали то, что я предлагаю?



0



прописать путь к файлу без открытия окна редактора VB

AB0885

Дата: Пятница, 12.08.2022, 18:00 |
Сообщение № 1

Группа: Пользователи

Ранг: Участник

Сообщений: 60

Применяю макрос
[vba]

Код

Sub вводсборлистов()
Dim myWord As New Word.Application, myDoc As Word.Document
Set myDoc = myWord.Documents.Open(«D:UsersUserDesktopфайл.docx»)
Workbooks(«этот файл.xlsm»).Worksheets(«КОПИЯ1»).Range(«A1»).CurrentRegion.Copy
myDoc.Bookmarks(«vot»).Range.PasteExcelTable False, False, False
myWord.Visible = True
myWord.Visible = True
myDoc.Tables(1).AutoFitBehavior (wdAutoFitContent)
Set myWord = Nothing
Set myDoc = Nothing
End Sub

[/vba] для перевода из эксель в ворд. Флешку с файлами ношу с собой, при подключении к другому компьютеру приходится открывать и активировать вкладку «Разработчик» и постоянно прописывать путь (D:UsersUserDesktopфайл.docx, путь скопировал для примера) к вордовскому файлу. Есть ли возможность прописывать путь не открывая окно редактора VB.

 

Ответить

Kuzmich

Дата: Суббота, 13.08.2022, 11:21 |
Сообщение № 2

Группа: Проверенные

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

Замечаний:
0% ±


Excel 2003

Включите в ваш макрос диалог выбора файла
[vba]

Код

Dim FD As FileDialog
Set FD = Application.FileDialog(msoFileDialogFilePicker)

[/vba]
и выбирайте нужный файл в диалоговом окне

 

Ответить

AB0885

Дата: Суббота, 13.08.2022, 19:05 |
Сообщение № 3

Группа: Пользователи

Ранг: Участник

Сообщений: 60

Kuzmich, ошибка object required
поставил вместо второй и третьей строки

Сообщение отредактировал AB0885Суббота, 13.08.2022, 19:07

 

Ответить

AB0885

Дата: Воскресенье, 14.08.2022, 09:48 |
Сообщение № 4

Группа: Пользователи

Ранг: Участник

Сообщений: 60

даже так попробовал [vba]

Код

Dim lngCount As Long

    ‘ Open the file dialog
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        .Show

        ‘ Display paths of each file selected
        For lngCount = 1 To .SelectedItems.Count
            MsgBox .SelectedItems(lngCount)
        Next lngCount

    End With

[/vba] та же ошибка. Чего-то не хватает.

 

Ответить

Kuzmich

Дата: Воскресенье, 14.08.2022, 11:05 |
Сообщение № 5

Группа: Проверенные

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

Замечаний:
0% ±


Excel 2003

Цитата

Чего-то не хватает.

Диалог выбора файла позволяет вам только указать файл (.SelectedItems), после чего его нужно открыть командой Open

 

Ответить

AB0885

Дата: Воскресенье, 14.08.2022, 12:58 |
Сообщение № 6

Группа: Пользователи

Ранг: Участник

Сообщений: 60

Kuzmich, как его правильно открыть?

 

Ответить

Kuzmich

Дата: Воскресенье, 14.08.2022, 13:11 |
Сообщение № 7

Группа: Проверенные

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

Замечаний:
0% ±


Excel 2003

В MsgBox вы видите нужный вам файл?

Эта конструкция у вас работает?
[vba]

Код

Set myDoc = myWord.Documents.Open(«D:UsersUserDesktopфайл.docx»)

[/vba]
Вместо этого пути «D:UsersUserDesktopфайл.docx» подставляете, то что выбрали .SelectedItems(1) например

 

Ответить

AB0885

Дата: Понедельник, 15.08.2022, 08:38 |
Сообщение № 8

Группа: Пользователи

Ранг: Участник

Сообщений: 60

вроде должно быть так [vba]

Код

Dim lngCount As Long
    With Application.FileDialog(msoFileDialogOpen)
        If .Show = 0 Then Exit Sub ‘показывает диалог
        ‘цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
            x = .SelectedItems(lf) ‘считываем полный путь к файлу
           Dim myWord As New Word.Application, myDoc As Word.Document
          Set myDoc = myWord.Documents
        Next

[/vba] но почему то ошибку 13 выдаёт

 

Ответить

Kuzmich

Дата: Понедельник, 15.08.2022, 10:58 |
Сообщение № 9

Группа: Проверенные

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

Замечаний:
0% ±


Excel 2003

Вы забыли открыть выбранный файл
[vba]

Код

Set myDoc = myWord.Documents.Open(x)

[/vba]
Посмотрите на какой строке останавливается макрос

 

Ответить

AB0885

Дата: Понедельник, 15.08.2022, 16:58 |
Сообщение № 10

Группа: Пользователи

Ранг: Участник

Сообщений: 60

Kuzmich, на вашей строке уходит в цикл. В диспетчере задач ворд появляется.

 

Ответить

Kuzmich

Дата: Понедельник, 15.08.2022, 18:31 |
Сообщение № 11

Группа: Проверенные

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

Замечаний:
0% ±


Excel 2003

AB0885, так вы выберите один файл в диалоговом окне и посмотрите открылся он или нет

 

Ответить

AB0885

Дата: Понедельник, 15.08.2022, 19:34 |
Сообщение № 12

Группа: Пользователи

Ранг: Участник

Сообщений: 60

Kuzmich, я так и делаю. Да открывается нужный файл. Тогда получается в закладку в Ворд не отправляется таблица.

 

Ответить

Kuzmich

Дата: Понедельник, 15.08.2022, 20:31 |
Сообщение № 13

Группа: Проверенные

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

Замечаний:
0% ±


Excel 2003

Цитата

Тогда получается в закладку в Ворд

Закладка — Bookmarks
Где у вас в коде?

 

Ответить

AB0885

Дата: Понедельник, 15.08.2022, 21:28 |
Сообщение № 14

Группа: Пользователи

Ранг: Участник

Сообщений: 60

Kuzmich, Sub [vba]

Код

Sub вводсборлистов()
Dim lngCount As Long
    With Application.FileDialog(msoFileDialogOpen)
        If .Show = 0 Then Exit Sub
               For lf = 1 To .SelectedItems.Count
            x = .SelectedItems(lf)
           Dim myWord As New Word.Application, myDoc As Word.Document
          Set myDoc = myWord.Documents.Open(x)

    Next

    End With
Workbooks(«этот файл.xlsm»).Worksheets(«КОПИЯ1»).Range(«A1»).CurrentRegion.Copy
myDoc.Bookmarks(«vot»).Range.PasteExcelTable False, False, False
myWord.Visible = True
myWord.Visible = True
myDoc.Tables(1).AutoFitBehavior (wdAutoFitContent)
Set myWord = Nothing
Set myDoc = Nothing
End Sub

[/vba]
сейчас такой макрос

 

Ответить

Pelena

Дата: Среда, 17.08.2022, 08:04 |
Сообщение № 15

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

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


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

_Boroda_

Дата: Среда, 17.08.2022, 09:06 |
Сообщение № 16

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

AB0885

Дата: Среда, 17.08.2022, 13:16 |
Сообщение № 17

Группа: Пользователи

Ранг: Участник

Сообщений: 60

Pelena, вот спасибо, заработало. У меня уже было такое один раз, так же составляли макрос, у меня не работает, а у специалиста работает, долго «бились» запустить макрос. По итогу я взял свой рабочий документ переслал на другой компьютер и у меня заработало. СПАСИБО. Макрос работает.
P.S. Подскажите, что надо делать, чтобы избавиться от таких случаев.

Сообщение отредактировал AB0885Среда, 17.08.2022, 13:22

 

Ответить

Формулировка задачи:

в макросе MS Word нужно получить путь и имя файла, выбранного в диалоговом окне «Открыть файл»..
имя файла есть, а вот путь к нему никак не удается получить.. пол дня сегодня убил на поиск нужной функции, так и не нашел..

т.е. при выборе файла сейчас выдается сообщение с его именем, типа «Книга1.xls», а нужно чтобы выводилось «c:ДиректорияКнига1.xls».. помогите, плиз, решить проблемку..

Код к задаче: «Путь к файлу»

textual

    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = "*.xls"
        .AllowMultiSelect = False
        If .Show = -1 Then MsgBox .SelectedItems(1)
    End With

Полезно ли:

14   голосов , оценка 4.071 из 5

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Путь к папке в word
  • Р21001 скачать бланк 2016 в excel
  • Путь к листу excel
  • Р11001 скачать бланк 2022 в excel
  • Путь к word exe

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии