Как перейти к закладке в Word-VBA и вставить текст? - PullRequest
8 голосов
/ 28 апреля 2010

Я пытаюсь создать документ Word с очень простым макросом слова. Макрос ищет закладку, которую я поместил в текст, а затем добавляет дату, через 2 недели, в это место.

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

Как мне заставить его работать? Я добавил небольшой фрагмент кода к событию Document_New(), но он продолжает сообщать Закладка не найдена .

У меня есть документ в rar-файле, поскольку мой веб-сервер не может обрабатывать расширения .dotm. Документ

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

Sub Two_Weeks_Ahead()
''# Two_Weeks_Ahead Makro
    Selection.GoTo What:=wdGoToBookmark, Name:="TwoWeeks"
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With

    Dim dt As Date
    dt = DateAdd("d", 14, DateTime.Now)

    Selection.TypeText Text:=Format(dt, "yyyy-MM-dd")
End Sub

Private Sub Document_New()
    Selection.GoTo What:=wdGoToBookmark, Name:="TwoWeeks"
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With

    Dim dt As Date
    dt = DateAdd("d", 14, DateTime.Now)

    Selection.TypeText Text:=Format(dt, "yyyy-MM-dd")
End Sub

1 Ответ

2 голосов
/ 28 июня 2010

Это может быть связано с использованием ActiveDocument в вашем коде. Документ вызывающего макроса все еще может быть ActiveDocument, поэтому он не найдет никакой закладки. Вот как я могу это сделать из документа / шаблона с поддержкой макросов, который хорошо работает.

Sub AddTwoWeeks()
    Dim d As Document
    Set d = Documents.Add("C:\Users\Me\Desktop\Title.dotx")

    Dim dt As Date
    dt = DateAdd("d", 14, DateTime.Now)

    Dim b As Bookmark
    Set b = d.Bookmarks("TwoWeeks")
    b.Range.Text = Format(dt, "yyyy-MM-dd")
End Sub
...