2009-04-30 28 views
0

我在當前用戶的註冊表中獲取了要添加到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

Error in a Word VBA macro, trying to insert values into bookmarks 已經回答了。肯尼瞭解到自己(重新設置書籤):

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

和Tom幫助使用前檢查...

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