J'essaie d'écrire une macro Word qui insère les données de l'utilisateur actuel dans le registre dans des signets prédéfinis dans le document. J'ai un fichier ini qui dicte le nom de chaque entrée du registre, et cette valeur est ensuite importée dans une boucle de la macro Word. Cela fonctionne bien (je pense), mais la macro Word doit également insérer les données dans le document. Et cela fonctionne bien si les signets sont présents, mais s'ils ne le sont pas, la macro semble insérer les données de toute façon. Ce n'est pas ce que je veux. Je veux simplement que la macro insère les données SI un signet correspondant au nom est présent. J'ai fait en sorte que chaque signet s'appelle ""Signet" & sBookMarkname".
Et voici le code
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
Maintenant, l'erreur se produit à peu près ici :
sVerdi = objShell.RegRead(regPath & "\" & Felter) ''"
sBookMarkName = ""
sBookMarkName = (sBookMarkNametemp)
If sVerdi <> Felter Then
Même si le registre ne contient que trois clés, la macro passe en revue chaque nom obtenu à partir du fichier texte et insère la dernière clé de registre plusieurs fois.