Вставить данные из реестра в предварительно определенные закладки - PullRequest
0 голосов
/ 30 апреля 2009

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

У меня уже есть этот код, где мне нужно предварительно определить массив всех данных, которые я получил в реестре. Макрос сохраняет значения каждого подключа из реестра в строку. Но не вставляет значение в закладку, если закладка не существует. Ну, это идея в любом случае.

Public Sub TemplateData()

    Dim objShell
    Dim strShell
    Dim strDataArea
    Dim Values() As String
    Dim Fields

    ' Input the exact same key as in registry
    Fields = Array("DEPARTMENT", "LETTER", "LNAME", "FNAME")


    Set objShell = CreateObject("Wscript.Shell")

    strDataArea = "HKCU\Templates\"
    On Error Resume Next


    For iTeller = 0 To UBound(Fields)

        Dim sBookMarkName, sValue
        sBookMarkName = "Bookmark" & Fields(iTeller)
        sValue = objShell.RegRead(strDataArea & Fields(iTeller))

        Selection.GoTo What:=wdGoToBookmark, Name:=sBookMarkName
        Selection.Delete Unit:=wdCharacter, Count:=0
        Selection.InsertAfter sValue       

    Next
    On Error GoTo 0

End Sub

Если я поставлю точку останова внизу Далее, я вижу, что она действительно находит закладки, но каким-то образом вставляет значения каждого подраздела реестра, пока не найдет правильный. И первоначальная идея также состоит в том, чтобы макрос удалял все слова из bookmkarks, если я запустил макрос еще раз, поскольку, если данные в реестре обновляются, макрос должен их забрать и вставить в документ.

Кто-нибудь может найти, что здесь может быть не так?

1 Ответ

1 голос
/ 10 сентября 2010

Ошибка в макросе Word VBA при попытке вставить значения в закладки есть ответы. Кенни узнал сам (переустановить закладку):

 ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:=sBookMarkName

и Том помог проверить перед использованием ...

If ActiveDocument.Bookmarks.Exists(sBookmarkName) Then
    ... insert using your code
End If
...