Я пытаюсь написать макрос 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
Даже если реестр содержит только три ключа, макрос просматривает каждое имя, полученное из текстового файла, и вставляет последний ключ реестра несколько раз.