4

В MS Word вы можете вставить код поля, чтобы показать имя файла документа с возможностью включать или не включать полный путь.

Я хочу только вставить путь к папке, исключая имя файла.

Макросы не вариант.

Можно ли это сделать?

Есть ли альтернативный код поля?

Есть ли какой-то волшебный недокументированный переключатель на поле FILENAME? (Microsoft, как известно, делала это раньше!)

2 ответа2

3

К сожалению, нет способа сделать это с полем FILENAME без макроса, поле FILENAME не предлагает опцию пропустить имя файла.

В любом случае, здесь есть макрос для вставки пути к файлу без имени файла для тех, кому это может понадобиться.

Sub InsertPath()
  Dim sPath As String

  sPath = ActiveDocument.Path
  If sPath = "" Then
    MsgBox "You need to save the document before running this macro.", _
           vbOKOnly, "Document not saved"
  Else
    sPath = sPath & Application.PathSeparator
    Selection.TypeText(sPath)
  EndIf
EndSub
3

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

Проблема в том, что это может мешать форматированию, и это очень плохо.

- = EDIT = -

Чуть менее грязное решение ...

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

Sub updatePath()
'
' updatePath Macro
'
'
Dim myPath As String
myPath = ActiveDocument.Path
If myPath = "" Then
    'do nothing as the document has no path... needs to be saved first
Else
    If ActiveDocument.Variables.Count = 0 Then
        ActiveDocument.Variables.Add Name:="myPath", Value:=myPath
    Else
        i = 1
        Do While i < (ActiveDocument.Variables.Count + 1)
            If ActiveDocument.Variables.Item(i).Name = "myPath" Then
                ActiveDocument.Variables.Item(i).Value = myPath
            End If
            i = i + 1
        Loop
    End If
End If

End Sub

А затем просто добавьте код поля

DOCVARIABLE myPath

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .