Word VBA宏出错,试图将值插入书签

Word VBA宏出错,试图将值插入书签,vba,text-files,ms-word,Vba,Text Files,Ms Word,我正在尝试编写一个Word宏,它将注册表中当前用户的数据插入文档中预定义的书签中。我有一个ini文件,它指示每个注册表项的名称,然后将该值导入Word宏中的循环中。这很好(我认为),但是单词macro也需要将数据插入到文档中。如果书签在那里,这很好,但是如果没有,宏似乎还是会插入数据。我不想那样。我只想宏插入数据,如果有一个书签与该名称相关。我这样做是为了让每个书签都被称为“bookmarkname”和sBookMarkname 这是密码 Sub MalData() '' ''/

我正在尝试编写一个Word宏,它将注册表中当前用户的数据插入文档中预定义的书签中。我有一个ini文件,它指示每个注册表项的名称,然后将该值导入Word宏中的循环中。这很好(我认为),但是单词macro也需要将数据插入到文档中。如果书签在那里,这很好,但是如果没有,宏似乎还是会插入数据。我不想那样。我只想宏插入数据,如果有一个书签与该名称相关。我这样做是为了让每个书签都被称为“bookmarkname”和sBookMarkname

这是密码

Sub MalData()
    ''
    ''// MalData Macro
    ''

    Dim objShell
    Dim strShell
    Dim strDataArea
    Dim Verdier() As String
    Dim regPath
    Dim regString
    Dim Felter
    Dim WScript

    Dim sFileName As String
    Dim iFileNum As Integer
    Dim sBuf As String


    sFileName = "C:\felter.ini"
    If Len(Dir$(sFileName)) = 0 Then
        MsgBox ("Can't find " & sFileName)
    End If

    ''//Load values from ini-file which is later used to query the registry

    Set objShell = CreateObject("Wscript.Shell")

    With New Scripting.FileSystemObject
    With .OpenTextFile(sFileName, ForReading)

        If Not .AtEndOfStream Then regPath = .ReadLine
        If Not .AtEndOfStream Then regString = .ReadLine

        Do Until .AtEndOfStream
            Felter = .ReadLine

            On Error Resume Next
            Dim sBookMarkName, sVerdi
            sBookMarkNametemp = "Bookmark" & Felter
            MsgBox (sBookMarkNametemp)
            sVerdi = objShell.RegRead(regPath & "\" & Felter) ''"

            sBookMarkName = ""
            sBookMarkName = (sBookMarkNametemp)

            If sVerdi <> Felter Then
                Selection.GoTo What:=wdGoToBookmark, Name:=sBookMarkName
                Selection.Delete Unit:=wdCharacter, Count:=0
                Selection.InsertAfter sVerdi
                ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:=sBookMarkName
            End If
        Loop

        On Error GoTo 0
    End With
    End With

End Sub
Sub-MalData()
''
''//MalData宏
''
昏暗的奥布舍尔
昏暗的屋顶
暗标准区
Dim Verdier()作为字符串
暗通道
暗正则字符串
暗毡
Dim WScript
将sFileName设置为字符串
作为整数的Dim iFileNum
作为字符串的Dim sBuf
sFileName=“C:\felter.ini”
如果Len(Dir$(sFileName))=0,则
MsgBox(“找不到”&sFileName)
如果结束
''//从ini文件加载值,该文件稍后用于查询注册表
设置objShell=CreateObject(“Wscript.Shell”)
使用新的Scripting.FileSystemObject
使用.OpenTextFile(sFileName,ForReading)
如果不是.AtEndOfStream,则regPath=.ReadLine
如果不是.AtEndOfStream,则regString=.ReadLine
直到.AtEndOfStream
费尔特=.ReadLine
出错时继续下一步
Dim sBookMarkName,sVerdi
sbookmarknametep=“书签”&Felter
MsgBox(sBookMarkNametemp)
sVerdi=objShell.regrad(regPath&“\”&Felter)“”
sBookMarkName=“”
sBookMarkName=(sBookMarkNametemp)
如果斯维尔迪·费尔特
Selection.GoTo What:=wdGoToBookmark,Name:=sBookMarkName
选择。删除单位:=wdCharacter,计数:=0
Selection.InsertAfter sVerdi
ActiveDocument.Bookmarks.Add范围:=Selection.Range,名称:=sBookMarkName
如果结束
环
错误转到0
以
以
端接头
现在,错误发生在以下位置:

sVerdi = objShell.RegRead(regPath & "\" & Felter) ''"

sBookMarkName = ""
sBookMarkName = (sBookMarkNametemp)

If sVerdi <> Felter Then
sVerdi=objShell.regrad(regPath&“\”&Felter)”命令
sBookMarkName=“”
sBookMarkName=(sBookMarkNametemp)
如果斯维尔迪·费尔特

即使注册表只包含三个键,宏也会遍历从文本文件中获取的每个名称,并多次插入最后一个注册表键

为什么不在插入名称之前检查书签是否存在

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

为什么不在插入名称之前检查书签是否存在

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