![]() |
|
|||||||
|
|
|
Thread Tools | Display Modes |
|
#1
|
||||
|
||||
|
Hello to all,
and happy new year! ![]() I was hoping some of the kind experts may be able to help me on this Autotext Building block problem. I have a number of building blocks that need to be inserted into documents. As per usual I have been running them individually. The Problem is I have too many building blocks to insert. For Example Find Code | Insert Building Block BBS1 | Signature 1 BBS2 | Signature 2 ............ ............ ............ and on and on etc Each document may have 10+ building blocks to find and insert. Hence what is a not once a difficult task becomes a rather manually laborious process - I have to do this to 100s of documents. ![]() I have seen this excellent thread. https://www.msofficeforums.com/word-...using-vba.html I have been trying to adapt it for the past week, and am just no closer to understanding the complex nature of the programming. My non working attempt Code:
Sub BuildingBlockArrayMacro()
' Replace Array Words with a Building Block - Autotext
Dim Rng As Word.Range
Dim ArrayList
Dim i As Long
ArrayList= Array("#BB1", "#BB2")
For i = 0 To UBound(ArrayList)
Set Rng = ActiveDocument.Range
With Rng.Find
.ClearFormatting
.Text = ArrayList(i)
.MatchWholeWord = True
While .Execute
' Need to insert search?
' Got stuck here
if .text = #BB1 then
ActiveDocument.AttachedTemplate.Builtinbuildingblocks("Signature1").Insert Where:=Rng,
RichText:=True
ElseIf .text = #BB2 then
ActiveDocument.AttachedTemplate.Builtinbuildingblocks("Signature2").Insert Where:=Rng,
RichText:=True
End With
Next
End Sub
https://www.msofficeforums.com/word-...using-vba.html http://gregmaxey.com/word_tip_pages/...d_replace.html I do believe I am not structurally creating the code correctly - I've got VBA blindness again. To Recap I would like to: 1. Find specific text in my document 2. Replace each text with the correct building blocks I would be really grateful as always for helping to solve this problem. I appreciate this may be a very advanced VBA code - as to why I am really stuck and appreciate the time and help from the individuals on the forum. ![]() Thank you in advance for all your time and help. J |
|
#2
|
||||
|
||||
|
It would make far more sense to rename your building blocks to match the array values (or vice versa) then you can simply insert the building block that matches the name. The method you have attempted is fine if there are only two different values in the document, but if there are ten it gets rather unwieldy. You can then use code such as the following.
If you have hundreds of documents to process then you might investigate http://www.gmayor.com/document_batch_processes.htm with a custom process (or depending on what is in the building blocks, a replace from table). The following macro can easily be modified to match the format used by the add-in's custrom process option, as shown in the second panel below. Code:
Option Explicit
Sub BuildingBlockArrayMacro()
' Replace Array Words with a Building Block - Autotext
Dim Rng As Word.Range
Dim ArrayList As Variant
Dim i As Long
ArrayList = Array("#BB1", "#BB2")
For i = 0 To UBound(ArrayList)
Set Rng = ActiveDocument.Range
With Rng.Find
Do While .Execute(FindText:=ArrayList(i), MatchWholeWord:=True)
Application.Templates(ActiveDocument.AttachedTemplate). _
BuildingBlockEntries(Rng.Text).Insert _
Where:=Rng, _
RichText:=True
Rng.Collapse 0
Loop
End With
Next i
lbl_Exit:
Exit Sub
End Sub
Code:
Function BBReplace(oDoc As Document) As Boolean
Dim Rng As Word.Range
Dim ArrayList As Variant
Dim i As Long
On Error GoTo err_Handler
ArrayList = Array("#BB1", "#BB2")
For i = 0 To UBound(ArrayList)
Set Rng = oDoc.Range
With Rng.Find
.ClearFormatting
Do While .Execute(FindText:=ArrayList(i), MatchWholeWord:=True)
Application.Templates(oDoc.AttachedTemplate). _
BuildingBlockEntries(Rng.Text).Insert _
Where:=Rng, _
RichText:=True
Rng.Collapse 0
Loop
End With
Next i
BBReplace = True
lbl_Exit:
Exit Function
err_Handler:
BBReplace = False
GoTo lbl_Exit
End Function
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#3
|
||||
|
||||
|
Hello Graham,
thank you very for much for your help and the coding. ![]() I understand building blocks are not the most user friendly of blocks, just take a look at the organizer, its extremely difficult to find what you need and really messy. I believe I may have one of your macros - where you can bulk replace a from a table - that would be the ideal situation bar none, except for one problem - I need the exact formatting. When you use a table replace - it simple replaces the text - I need the original formatting to be copied into each replacement. Also am I able to transfer images from a table to replace in word? If I could find a solution as such - I would transfer all my building blocks to a table. It would be a 1000 times easier to maintain. I really hate using building blocks - the templates become bulky, and its just a real head ache. As per original request - the reason I was trying to hard code in - is because different documents need different sets of building blocks - So I thought I would adapt the array lists. I can't remember where the link on your site was to the table replacement but here is a similar one https://cybertext.wordpress.com/2015...lace-routines/ Pardon me for my newbieness - in your code above where do I put the building block names is it in the function code. Thank you for your help ![]() J |
|
#4
|
||||
|
||||
|
In the macro code, if you change your building block names to match the tags in the document, the building block names go in the array.
If you want to use a table to replace the tags, then setup a two column table with no header row, the tags to find in column 1 and the formatted texts in column 2. Use manual formatting as styles may not be correctly reflected in the documents. You can then use the following macro as a custom process with the batch tool I linked to earlier: Code:
Option Explicit
Function TableReplace(oDoc As Document) As Boolean
On Error GoTo err_Handler
Dim oChanges As Document
Dim oTable As Table
Dim oRng As Range
Dim rFindText As Range, rReplacement As Range
Dim i As Long
Dim sFname As String
Dim sAsk As String
sFname = "C:\Path\Changes.docx" 'Change as appropriate
Set oChanges = Documents.Open(Filename:=sFname, Visible:=False)
Set oTable = oChanges.Tables(1)
For i = 1 To oTable.Rows.Count
Set oRng = oDoc.Range
Set rFindText = oTable.Cell(i, 1).Range
rFindText.End = rFindText.End - 1
Set rReplacement = oTable.Cell(i, 2).Range
rReplacement.End = rReplacement.End - 1
With oRng.Find
.ClearFormatting
.Replacement.ClearFormatting
Do While .Execute(FindText:=rFindText, _
MatchWholeWord:=True, _
MatchWildcards:=False, _
Forward:=True, _
Wrap:=wdFindStop) = True
oRng.Select
oRng.FormattedText = rReplacement.FormattedText
oRng.Collapse wdCollapseEnd
Loop
End With
Next i
oChanges.Close wdDoNotSaveChanges
TableReplace = True
lbl_Exit:
Exit Function
err_Handler:
TableReplace = False
Resume lbl_Exit
End Function
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#5
|
||||
|
||||
|
Hi Graham,
pardon me for not reading your instructions, when code blinds me, so does my ability to read .I wish to the high stars - Microsoft will sort out the horrendous building block organizer in the next update its long overdue. I updated the building block to match the search words An error popped up here Code:
Application.Templates(ActiveDocument.AttachedTemplate). _
BuildingBlockEntries(Rng.Text).Insert _
Where:=Rng, _
RichText:=True
Test Example Text A1 Replace Building Block - A1 Text A2 Replace Building Block - A2I will download the add in and try the second approach as well I am indebted to you for your help Thank you Graham ![]() J |
|
#6
|
||||
|
||||
|
You will find code for inserting building blocks from other locations on my web site at http://www.gmayor.com/word_vba_examples_3.htm
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#7
|
||||
|
||||
|
Hi Graham,
This is really mind blowing! Words can’t describe my elation. Programming like anything takes time and we all need to stand on the shoulders of giants. Sometimes when you have a horrendous task as per this thread - time is what you do not have. I used your add in and the TableReplace function you kindly wrote - to replace from a table. It replaced images as well. I can’t believe it! ![]() I am so happy I asked for help - You have saved me from the drudgery of manually searching and replacing building blocks. When a process has too many steps – there is always a bigger chance of mistakes and errors happening – as was the case with me individually running a dozen macros. In life - all you want is SIMPLICITY. This has achieved that goal thanks to you! This is a must have in my tool box now. Last night I just couldn’t muster the will to even begin to describe the problem, with the documents. It is a windy rainy and extremely gray day here typical brit weather, but you have really made my day. Thanks again for your generous generous help. You are Solid Gold! ![]() Thank you Graham, J So happy! Have a great rest of weekend and Happy New Year! This is Solved ![]() I will read instructions on how to attach template |
|
#8
|
||||
|
||||
|
You are welcome
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
| Tags |
| building block, vba word |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Problem batch adding autotext using Greg Maxey's Building Blocks Add-In | Genuine Gin | Word VBA | 5 | 12-16-2015 10:20 AM |
| Formatting Issues When Using If Statements and Inserting Building Blocks/Autotext | sanko787 | Mail Merge | 1 | 07-05-2014 09:00 PM |
| Building blocks show correctly in dropdown, but wrong building block populates in doc | wordgirl123 | Word | 0 | 10-03-2013 08:30 AM |
| INSERT building blocks from Quickpart in word | jasserin | Word VBA | 0 | 06-05-2013 12:55 PM |
| Word - Attach Building Blocks | namedujour | Word | 0 | 04-04-2011 09:59 AM |