Словарные шаблоны: Перезаписать информацию о закладке - PullRequest
0 голосов
/ 08 мая 2018

У меня есть шаблон, при открытии открывается пользовательская форма для указанных данных. Но как я могу удалить введенные данные (закладки), если я хочу перезапустить макрос, чтобы добавить новые данные. В настоящее время это просто добавляет к тому, что заполнено.

Private Sub Cancelbut_Click()
    PInfo.Hide

End Sub
Private Sub OKbut_Click()
    Dim CompamyName As Range
    Dim CompanyName2 As Range
    Set CompanyName = ActiveDocument.Bookmarks("CName").Range
    Set CompanyName2 = ActiveDocument.Bookmarks("CName2").Range
    CompanyName.Text = Me.TextBox1.Value
    CompanyName2.Text = Me.TextBox1.Value

    Dim VendorName As Range
    Set VendorName = ActiveDocument.Bookmarks("VName").Range
    VendorName.Text = Me.TextBox2.Value

    Dim ProjectName As Range
    Dim ProjectName2 As Range
    Set ProjectName = ActiveDocument.Bookmarks("PName").Range
    Set ProjectName2 = ActiveDocument.Bookmarks("PName2").Range
    ProjectName.Text = Me.TextBox3.Value
    ProjectName2.Text = Me.TextBox3.Value

    Dim ProjectCode As Range
    Set ProjectCode = ActiveDocument.Bookmarks("PCode").Range
    ProjectCode.Text = Me.TextBox4.Value

    Me.Repaint
    PInfo.Hide

End Sub

Как можно было бы очистить существующие данные? Чувствую, что это поможет любому, кто пытается работать с закладками в слове. Я попытался сделать это, но в итоге удалил закладки.

Ценю помощь!

1 Ответ

0 голосов
/ 09 мая 2018

Запись в закладку (как пользователем, так и с помощью кода) удаляет закладку - это дизайн. Однако при работе с VBA у вас есть обходной путь, недоступный пользователю ...

Если вы сначала назначите объект Range диапазону закладки, текст, назначенный диапазону, впоследствии может быть снова добавлен в закладки. Поскольку вы пишете множество закладок, лучше всего поместить эти действия в отдельную процедуру, а не повторять их по всему коду, как это предлагается ниже.

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

Function WriteToBookmarkRetainBookmark(rng As Object, content As String)
    Dim sBkmName As String

    sBkmName = rng.Bookmarks(1).Name
    rng.Text = content
    rng.Document.Bookmarks.Add sBkmName, rng
End Function

Private Sub OKbut_Click()
    Dim CompamyName As Range
    Dim CompanyName2 As Range

    Set CompanyName = ActiveDocument.Bookmarks("CName").Range
    Set CompanyName2 = ActiveDocument.Bookmarks("CName2").Range
    WriteToBookmarkRetainBookmark(CompanyName, Me.TextBox1.Value)
    WriteToBookmarkRetainBookmark(CompanyName2, Me.TextBox1.Value)

    Dim VendorName As Range
    Set VendorName = ActiveDocument.Bookmarks("VName").Range
    WriteToBookmarkRetainBookmark(VendorName, Me.TextBox2.Value)

    Dim ProjectName As Range
    Dim ProjectName2 As Range
    Set ProjectName = ActiveDocument.Bookmarks("PName").Range
    Set ProjectName2 = ActiveDocument.Bookmarks("PName2").Range
    WriteToBookmarkRetainBookmark(ProjectName, Me.TextBox3.Value)
    WriteToBookmarkRetainBookmark(ProjectName2, Me.TextBox3.Value)

    Dim ProjectCode As Range
    Set ProjectCode = ActiveDocument.Bookmarks("PCode").Range
    WriteToBookmarkRetainBookmark(ProjectCode, Me.TextBox4.Value)

    Me.Repaint
    PInfo.Hide    
End Sub
...