![]() |
|
#1
|
|||
|
|||
![]() Good morning. I have a docm template with vba code inside. This code has dozens of lines that refer to blocks of content that I have been creating in this style: Code:
Application.Templates( _ "C:\Users\X041754\Desktop\IT GATu.dotm"). _ BuildingBlockEntries("IT VEH LIGERO").Insert Where:=Selection.Range, RichText _ :=True Please help. I don't know how to implement a code so that, even if the location changes, I will be able to continue using the macros and the code. |
#2
|
|||
|
|||
![]()
See Using VBA to Insent an AutoText Entry or other Building Block.
Have your macro and the building block in the same template and use the fullname of ThisDocument as your source location. |
#3
|
|||
|
|||
![]() Quote:
I have the template in Code:
Application.Templates( _ "C:\Users\gorka\Desktop\IT GATu 2.dotm"). _ BuildingBlockEntries("HOME AND EXPOSURE").Insert Where:=Selection.Range, RichText _ :=True If they try to rework the document from that new location, the building blocks no longer work. Note: folder with random number are folders that they must name as a long number. For example: L:\02.- Reports 2022\File\1725849\IT GATu 2.dotm Last edited by gorkac; 03-18-2022 at 12:45 PM. Reason: One more question. |
#4
|
|||
|
|||
![]()
It's unclear to me whether your users are saving a copy of the template to the same folder in which they save a copy of the file? In other words, for every file they make, they also make a copy of the template??
My understanding is that DOCM files cannot contain building blocks; only templates can. Unless I'm wrong, what I would do is modify your macros per the code below: Code:
Sub CustomizeLocalFilepathsToUsername() ' 03/18/2022 ' Create a variable for the filepath to your template: Dim strFilepath As String ' Use the Environ("UserProfile") function to get the first portion of the ' user's file path -- that is, C:\User\username -- and concatenate with the ' rest of the path to your template in the STARTUP folder: strFilepath = Environ("UserProfile") & _ "\AppData\Roaming\Microsoft\Word\STARTUP\IT GATu 2.dotm" ' Here's what the full string looks like: Debug.Print strFilepath ' You need to run this line to access your template's building blocks: Application.Templates.LoadBuildingBlocks ' Modify the building-block paths in your template by replacing the hard- ' coded paths to the template with the "strFilepath" variable: Application.Templates(strFilepath).BuildingBlockEntries("HOME AND EXPOSURE").Insert _ Where:=Selection.Range, RichText:=True End Sub C:\Users\%username%\AppData\Roaming\Microsoft\Word \STARTUPNote that your users won't be able to create new documents based on this template if you put it here. If they need to do that, then it'd be better to store the template in their default templates location, which, unless they've changed the default location, is here: C:\Users\%username%\AppData\Roaming\Microsoft\Temp lates |
#5
|
|||
|
|||
![]()
Thanks in advanced.
STEP 1: Captura1.png This file cannot be removed, it is just to copy and paste to the new path. Content blocks in this file: Code:
Application.Templates( _ "L:\06. MODELOS DE DOCUMENTOS\01 ATESTADOS\ACCIDENTES DE CIRCULACIÓN\BAEI\Informe Tecnico\BAEI - INFORME TÉCNICO.dotm"). _ BuildingBlockEntries("INICIO Y EXPOSICION DE HECHOS").Insert Where:=Selection.Range, RichText _ :=True New location: L:\02.- ATESTADOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION\unknown variable folder name\BAEI – INFORME TECNICO.docm Captura7.PNG STEP 3: Ask the user for the name of that new folder. Captura5.PNG Worker copy and paste to that new location the file: L:\02.- ATESTADOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION\AT-14367894\BAEI – INFORME TECNICO.docm Captura6.PNG STEP 4: THIS IS WHAT I NEED: Code that replaces the content block path of the original file with the new path to do this in the file that the worker has taken to its new location: REPLACES: Code:
Application.Templates( _ "L:\06. MODELOS DE DOCUMENTOS\01 ATESTADOS\ACCIDENTES DE CIRCULACIÓN\BAEI\Informe Tecnico\BAEI - INFORME TÉCNICO.dotm"). _ BuildingBlockEntries("INICIO Y EXPOSICION DE HECHOS").Insert Where:=Selection.Range, RichText _ :=True Code:
Application.Templates( _ " L:\02.- ATESTADOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION\AT-14367894\BAEI – INFORME TECNICO.docm"). _ BuildingBlockEntries("INICIO Y EXPOSICION DE HECHOS").Insert Where:=Selection.Range, RichText _ :=True Can be done? |
#6
|
|||
|
|||
![]() Quote:
|
#7
|
|||
|
|||
![]() Quote:
In that situation, the location of your building block for your code will be in the template: Code:
ThisDocument.Fullname If the building block is used in multiple templates, it should be in a loaded global template and have a unique name. In that case, look at the macro for situation 3 on my linked page. |
#8
|
|||
|
|||
![]()
I do not understand well. I expected it to tell me something like: replace the part L:\06. MODELOS DE DOCUMENTOS\01 ATESTADOS\ACCIDENTES DE CIRCULACIÓN\BAEI\Informe Tecnico\BAEI - INFORME TÉCNICO.dotm for the variable "givemepath" or something like that
|
#9
|
|||
|
|||
![]()
It's difficult to determine your process because your screenshots appear to omit files that are also in the folder. And the folder path is including a file that is NOT appearing.
For example, you have a screenshot (Step 2) with a full filepath that includes a document, but that document is not shown in the list of files. Below, the path includes a FILE -- BAEI - INFORME TECNICO.docm -- but that file doesn't appear in the list of files. Code:
L:\02.- ATESTATDOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION\AT-17851411703\BAEI - INFORME TECNICO.docm 1. User goes to the following folder (or maybe other folders, too) with templates and makes a COPY of a template -- to be absolutely clear -- a DOTX file: Code:
L:\06. MODELOS DE DOCUMENTOS\01 ATESTADOS\ACCIDENTES DE CIRCULACION\Informe Tecnico\ 2. User creates a new folder with numerical name, for example, AT-123456789. 3. User PASTES the template (DOTX) file into the new folder. 4. User creates a new DOCM document file based on the template. The folder now CONTAINS BOTH THE *TEMPLATE* (DOTX) AND THE *FILE* (DOCM). 5. The user now works on the DOCM file.Again, if this is EXACTLY the process your users are using, then the problem can be solved. As an aside, and assuming this is, in fact, the process, unless there is some special business reason for including both the template (DOTX) file AND the document (DOCM) file in the same folder, this is a highly unusual work flow. It would be vastly simpler to store the templates in your users' default template folder, as noted in my earlier post. Finally, my earlier direction to save the template in the STARTUP folder is probably impractical because your users apparently have to create new files based on the templates, which cannot be done with templates in the STARTUP folder. |
#10
|
|||
|
|||
![]()
For example, you have a screenshot (Step 2) with a full filepath that includes a document, but that document is not shown in the list of files.
"because the file is inside each folder AT-12345678, AT-8659320,etc, it is so that you can see how it is structured" "L:\02.- ATESTADOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION\AT-1234568\BAEI – INFORME TECNICO.docm L:\02.- ATESTADOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION\AT-8659320\BAEI – INFORME TECNICO.docm L:\02.- ATESTADOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION\AT-4236793\BAEI – INFORME TECNICO.docm" Below, the path includes a FILE -- BAEI - INFORME TECNICO.docm -- but that file doesn't appear in the list of files. "because the file is inside each folder, it is so that you can see how it is structured" Code:
L:\02.- ATESTATDOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION\AT-17851411703\BAEI - INFORME TECNICO.docm 1. User goes to the following folder (or maybe other folders, too) with templates and makes a COPY of a template -- to be absolutely clear -- a DOTX file (a DOTM file it works): Code:
L:\06. MODELOS DE DOCUMENTOS\01 ATESTADOS\ACCIDENTES DE CIRCULACION\Informe Tecnico\ 2. User creates a new folder with numerical name, for example, AT-123456789. [B]YES[B] 3. User PASTES the template (DOTX) file into the new folder. [B]YES[B] 4. User creates a new DOCM document file based on the template. The folder now CONTAINS BOTH THE *TEMPLATE* (DOTX) AND THE *FILE* (DOCM). NOT, ONLY TEMPLATE DOCM 5. The user now works on the DOCM file.Again, if this is EXACTLY the process your users are using, then the problem can be solved. 1.- Which is quite simple to understand. Workers have a template (BAEI - INFORME TECNICO.docm). 2.- They copy it (so as not to overwrite it and so the next partner can use it) and paste it into the path: L:\02.- ATESTATDOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION\ 3.- A folder is created, to differentiate it from other folders that other colleagues create, for example: AT-12345678 4.-So you are left with the following path: L:\02.- ATESTATDOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION\AT-17851411703\BAEI - INFORME.docm TECNICO.docm Then comes the problem that I explain As the file BAEI - INFORME TECNICO.docm contains contentblock of this style: Code:
Application.Templates( _ "L:\06. MODELOS DE DOCUMENTOS\01 ATESTADOS\ACCIDENTES DE CIRCULACIÓN\BAEI\Informe Tecnico\BAEI - INFORME TÉCNICO.dotm"). _ BuildingBlockEntries("INICIO Y EXPOSICION DE HECHOS").Insert Where:=Selection.Range, RichText _ :=True Code:
L:\02.- ATESTATDOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION\AT-17851411703\BAEI - INFORME TECNICO.docm I need a way to ask the worker what address is the new path where the BAEI template is going to work - INFORME TECNICO.docm and thus this route replaces the one that comes in the content blocks so that they work. |
#11
|
|||
|
|||
![]()
Cross-Posted at vba - Building block does not work if someone changes the location template - Stack Overflow.
For cross-posting etiquette, please read: A Message to Forum Cross-Posters |
#12
|
|||
|
|||
![]() Quote:
If you give your users a .dotm template, it can hold the building block. Is there some reason to have the building block in a separate file? |
#13
|
|||
|
|||
![]()
I can't upload the file because it is 10MB
|
#14
|
|||
|
|||
![]() Quote:
YES, I need to have the original template for the rest of the workers; each one of them works the template independently and they need to save the individual work in their own folders. Is there a way to replace this line with this one, asking the user which path to save it to? Marked bold line, replace Application.Templates( _ "L:\06. MODELOS DE DOCUMENTOS\01 ATESTADOS\ACCIDENTES DE CIRCULACIÓN\BAEI\Informe Tecnico\BAEI - INFORME TÉCNICO.dotm"). _ BuildingBlockEntries("INICIO Y EXPOSICION DE HECHOS").Insert Where:=Selection.Range, RichText _ :=True by this other line or something similar: Application.Templates( _ "L:\02.- ATESTADOS 2022\ATESTADOS PAMPLONA\2. ACCIDENTES CIRCULACION" & AT-1234568 & "\BAEI – INFORME TECNICO.docm"). _ BuildingBlockEntries("INICIO Y EXPOSICION DE HECHOS").Insert Where:=Selection.Range, RichText _ :=True AT-1234568 Name that the user is asked for, because I don't know what name he is going to give to that folder. |
#15
|
|||
|
|||
![]()
Sorry, it's a .dotm template, actually.
|
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Mapped Content Controls in Building Blocks? | Charles Kenyon | Word | 6 | 05-21-2021 05:40 PM |
Stop hyperlink to a file from changing address - causes problems with pdf | c.davidson | Word | 1 | 09-15-2020 11:11 PM |
![]() |
Genericname1111 | Word | 0 | 05-20-2020 04:17 PM |
![]() |
thoerzer | Word | 5 | 10-10-2019 12:10 AM |
Changing Absolute path to Relative in a Macro | MrKim | Excel Programming | 13 | 01-26-2019 02:18 PM |