将数据从注册表插入预定义的书签

时间:2009-04-30 14:41:22

标签: vbscript ms-word

我在当前用户下的注册表中有数据,我想将其添加到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

如果我在底部放置断点接下来,我可以看到它确实找到了书签,但不知何故它会插入每个注册表子项的值,直到找到正确的值。如果我再次运行宏,那么最初的想法也是让宏删除bookmkark中的任何单词,因为如果注册表中的数据得到更新,宏应该选择它并将其插入到文档中。

有人能找到可能出错的地方吗?

1 个答案:

答案 0 :(得分:1)

Error in a Word VBA macro, trying to insert values into bookmarks 有答案。肯尼学会了自己(重新设置了书签):

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

汤姆在使用前帮助检查......

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