J'utilise cette fonction pour remplacer certaines chaînes de l'accès dans un document Word. Cette fonction fonctionne assez bienProblème gênant avec la clause "with" dans VBA
Sub reemplazar(doc As Word.Document, after As String, before As String, replaceall As Boolean)
With doc.Content.Find
.Text = after
.Replacement.Text = before
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
If replaceall Then
.Execute replace:=wdReplaceAll
Else
.Execute replace:=wdReplaceOne
End If
End With
End Sub
Mais ... Je ne sais pas pourquoi si je réécris la fonction de cette façon, il cesse de fonctionner. Il n'y a pas d'erreur ou d'avertissement, mais les remplacements ne sont pas faits. Est-ce que quelqu'un peut expliquer quelle est la différence entre ces deux extraits ou pourquoi le second ne fonctionne pas correctement?
Sub reemplazar(doc As Word.Document, after As String, before As String, replaceall As Boolean)
doc.Content.Find.Text = after
doc.Content.Find.Replacement.Text = before
With doc.Content.Find
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
If replaceall Then
.Execute replace:=wdReplaceAll
Else
.Execute replace:=wdReplaceOne
End If
End With
End Sub
Merci!
Bonne réponse-cause et réponse-code. Vous pouvez et devez indiquer clairement que vous êtes en train d'énumérer les problèmes du deuxième extrait de code. – jpinto3912
Pouah. Je suis sûr que vous avez raison, mais il est assez révoltant que l'accès à une propriété crée un nouvel objet à chaque fois. – Vicky
@Vicky, pas vraiment, si vous voulez dire que la méthode Find renvoie un objet, cela a plus à voir avec le fait que vous n'utilisez pas l'initialisation d'un objet fortement typé à la valeur de retour de votre méthode de recherche. puis attendre les valeurs de propriété de deux objets différents implicitement typés pour maintenir l'état entre les uns et les autres ... hmm. –