1 votes

Erreur dans une macro VBA Word, lors de l'insertion de valeurs dans des signets

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X