我在当前用户下的注册表中有数据,我想将其添加到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中的任何单词,因为如果注册表中的数据得到更新,宏应该选择它并将其插入到文档中。
有人能找到可能出错的地方吗?
答案 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