Makro zu finden, die mehrere Zeichenfolgen und text einfügen (spezifisch für jede saite) am Ende jedes vorkommen
Das Szenario:
Word-Dokumente, enthalten eine Auswahl von Sätzen (strings). Es könnte bis zu 30 möglichen Zeichenfolgen (die variieren von 5 bis 20 Wörter lang). Das Dokument enthält nur eine Auswahl von diesen strings.
Ziel:
Makro durchsucht das Dokument, findet jedes vorkommen einer bestimmten Zeichenfolge und fügt einen bestimmten text, code (wie " (ACWD2553)") nach jedes vorkommen. Dies wiederholt sich für alle anderen strings im set, mit jeder anderen saite mit einem eigenen eindeutigen code. Einige Zeichenfolgen werden nicht in das Dokument. Die strings können direkt in der Dokument-Körper und Zellen.
Das makro würde dann angewendet werden, um andere Dokumente, die eine andere Auswahl der Saiten.
Habe ich versucht, für viele Tage mit Auswahl.finden, Inhalte.finden Sie, Ziel.Liste, insertafter und so, aber nur mit einem Fall und lief noch in zahlreiche Probleme (z.B. nur das einfügen in eine Instanz, oder den code mehrmals einsetzen, bis Word friert ein).
Bonus-feature ###
In der Lage sein zu entscheiden, welche Anzahl von strings nach dem gesucht wird (es gibt möglicherweise bis zu 60 Sätze) und Ihre entsprechenden codes. Jedes Dokument würde nur strings aus einem einzigen Satz.
Eine Idee, die ich hatte, war für die Saiten sind in einer Spalte (in Excel?) und die passenden codes in die zweite Spalte. Das makro würde dann durchsuchen Sie das Dokument für jeden string in der Liste (anhalten am Ende der Liste, da die Anzahl der Saiten variiert zwischen den Sätzen) findet den passenden code in die Zelle in der nächsten Spalte und fügt dann den code für jedes vorkommen der Zeichenfolge in das word-doc. Wenn ein anderer Satz erforderlich ist, wird die Excel-Datei kann ausgetauscht werden, mit der die Datei mit dem entsprechenden Satz von Stacheln, aber mit der gleichen Datei-Namen. Oder alle Sätze in eine Excel-Datei auf verschiedenen Arbeitsblättern und name der Registerkarte Eingabe in Word (userform?) die Kräfte, die Suche nach relevanten. Diese Datei liegt auf einem Netzlaufwerk.
Nicht sicher, ob diese größer ist dann Ben Hur, das Letzte Stück wäre schön, aber ich kann auch manuell geben Sie die Zeichenfolgen in der raw-code aus einem template-code.
Bearbeitet diesen Beitrag auf meine schlechten Versuch, den code. Siehe mein Kommentar unten. Ich habe gerade gemerkt, dass ich hinzufügen könnte-code zu diesem Bereich. Versucht eine Vielzahl von Iterationen der folgenden, von denen keiner funktionierte gut, und die nicht an das heran, was ich brauche. Ich weiß, es gibt offensichtliche Fehler, wie ich weiter unten gesagt habe ich rumprobiert mit dem code und machte es noch schlimmer in dem Prozess, durch mischen von bits und Stücke zusammen.
Sub Codes()
Dim range As range
Dim i As Long
Dim TargetList
TargetList = Array("This is sentence 1", "This is string 2 which could be twenty words in length", "This is string three, there could be thirty more strings to search") ' put list of terms to find here
For i = 0 To UBound(TargetList)
Set range = ActiveDocument.range
With range.Find
.Text = TargetList(i)
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute(Forward:=True) = True
range.Find.Execute
range.InsertAfter Text:=" (ACWD1234)"
Loop
End With
Next
End Sub
- Sie haben geschrieben:
I have tried for many days using selection.find, content.find
... Zeigen, dass code, mit dem wir Ihnen helfen können, zu verbessern..Find
wird notwendig sein, für Sie sicher. - Ich habe nicht den code, da es ziemlich Quatsch und es geht nicht überall in der Nähe was ich brauche. Auch ich habe gespielt mit ihm um, so dass der aktuelle code ist noch schlimmer als die vorherigen iteration. Ich dachte, meine Beschreibung wäre bessere Vorstellung von dem, was ich bin nach, und der code könnte nur verwirren sich die Dinge. Aber hier ist sowieso: ... begrenzt durch die Zeichen-Grenze, kann nicht fügen Sie den code in.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass dies eine Zeit zu verwenden, ersetzen Sie statt finden, finden Sie unter Umsetzung weiter unten. Wenn der spezifische code ändert sich je nach der Ziel-string können Sie hanlde dies ganz einfach mit einem 2-dimensionalen array
Den code unten tut genau das, was Sie brauchen. Ich weiß nicht, ob das ersetzen der ganze Inhalt-Eigenschaft des document-Objekts hat einige seltsame Effekt in die Auswertung/formatieren und so weiter.
Möchte ich lieber nicht hinzufügen overhead mit string/array/collection Manipulationen. Mit suchen und ersetzen ist wohl der offensichtlichste Weg, aber ich mag es nicht, dass die ganze Menge von Optionen Sie einstellen müssen (weil ich verstehen keiner von Ihnen =P)
Müssen Sie fügen Sie einen Verweis auf "Microsoft scripting runtime"
Können Sie abrufen, Ihre Daten zu erstellen, die mapper Wörterbuch aus einem excel-Arbeitsblatt ohne Probleme.
Dank an die beiden antwortenden. Ich habe nicht das skillset, um die Fortschritte der zweite code. Ich landete auf der Suche für Lesen von Daten aus Excel in ein word-Dokument und code gefunden, der funktioniert perfekt.
Verwendung von Excel als Datenquelle in Word-VBA
http://social.msdn.microsoft.com/Forums/office/en-US/ca9a31f4-4ab8-4889-8abb-a00af71d7307/using-excel-as-data-source-in-word-vba
Code produziert von Doug Robbins.
Diesem war ein absoluter Leckerbissen.
Auch heißt es, dass ich die Bearbeitung der Excel-Datei für die verschiedenen Sätze von Aussagen und die dazu passenden codes. Jetzt wäre es vor allem lieb, wenn ich arbeiten könnte, wie Sie eine userform erstellen, öffnen würde, wenn ich das makro ausführen, und wählen Sie die entsprechende woprksheet basiert auf der userform dropdown-Liste gewählten Eintrag.