Ошибка в макросе Word VBA при попытке вставить значения в закладки - PullRequest
1 голос
/ 03 июня 2009

Я пытаюсь написать макрос Word, который вставляет данные из текущего пользователя в реестр в предопределенные закладки в документе. У меня есть INI-файл, который определяет имена каждой записи реестра, и это значение затем импортируется в цикл в макросе Word. Это работает хорошо (я думаю), но макрос Word должен также вставить данные в документ. И это прекрасно работает, если есть закладки, но если их нет, макрос все равно вставляет данные. Я не хочу этого Я просто хочу, чтобы макрос вставлял данные, ЕСЛИ есть закладка, соответствующая названию. Я сделал так, что каждая закладка должна называться "" Закладка "и 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

Теперь ошибка происходит примерно здесь:

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

sBookMarkName = ""
sBookMarkName = (sBookMarkNametemp)

If sVerdi <> Felter Then

Даже если реестр содержит только три ключа, макрос просматривает каждое имя, полученное из текстового файла, и вставляет последний ключ реестра несколько раз.

1 Ответ

1 голос
/ 03 июня 2009

Почему бы вам не проверить, существует ли закладка перед тем, как вставить имя?

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