#1
|
|||
|
|||
Copy Text only of a Content Control
Is there a way to select a content control in Word 2013 and copy the text only? When the content control is selected and copied and then pasted into another document, Word copies the content control into the document along with the text. We only want the text to be copied, not the content control itself.
|
#2
|
||||
|
||||
If you are copying and pasting manually then, it is not the copying that is the problem but the pasting. Select Paste > Keep Text Only.
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
#3
|
|||
|
|||
I tried doing Keep Text only and then I lose underscores, strikethroughs, etc. I want to keep all formatting and text, just not the Content Control itself.
|
#4
|
||||
|
||||
In that case you will need a macro. The following should do the job, copying the formatted text of the content control containing the cursor to the clipboard.
Code:
Sub CopyCC_Content() Dim oCC As ContentControl Dim oRng As Range On Error GoTo lbl_Exit For Each oCC In ActiveDocument.ContentControls If Selection.InRange(oCC.Range) Then Set oRng = oCC.Range oCC.Delete oRng.FormattedText.Copy ActiveDocument.Undo 1 Exit For End If Next oCC lbl_Exit: Exit Sub End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
#5
|
|||
|
|||
Is there any way to get the contents without deleting the original content control? If something happens (the user clicks undo, or word ends abruptly), we don't want the original document to lose its content control.
|
#6
|
|||
|
|||
I would change the code in one main way, and that is to test if the ContentControl ("CC") is locked. If it is, and you don't unlock it, then you won't be able to delete it.
It is also important to note that this will not work for a nested CC unless you unlock them too. You would need to add a test if there is one or more parents. The best way to do that is to call a Function that tests the a parent's ID. If there is no parent then it will error out. If there is, then unlock the Parent and pass the Parent CC (via the ID you just got) back to the function and keep going until you get to the top Parent Level (i.e. Parent_ID will be "" when the test for it fails). Sub Copy_CC_Text On Error Goto lblError Dim bLocked As Boolean Dim oCC As ContentControl Dim oRng As Range For Each oCC In ActiveDocument.ContentControls If Selection.InRange(oCC.Range) ThenNext oCCSet oRng = oCC.RangeEnd If lblExit: Exit SublblError: Debug.Print "In Copy_CC_Text got error: " & Err.Number & ", " & Err.DescriptionExit Sub Last edited by skarden; 03-27-2022 at 01:01 PM. |
#7
|
|||
|
|||
BTW, I found that when you undelete a Date (calendar) control it doesn't come back as a date CC. It also doesn't remember the date format or storage formate. So I had to create variables that save my CC's type, date format (e.g. MM/dd/YYYY) and storage formate (for this later one, I often set it to just Date vs Date and Time if it is just a date)
So at the top in my Dim section I added: Dim sDate_Format As String 'In case we have a Date control we will have to reset its format after it is undeleted Dim sDate_Storage As String Dim sType As String 'Need this because we have to reset the type to Date after it is undeleted if it was a date CC And then when I found it I added: sType = CC.Type If sType = wdContentControlDate Then sDate_Format = CC.DateDisplayFormat sDate_Storage = CC.DateStorageFormat End If Finally after I did the undelete I added: If sType = wdContentControlDate Then 'If you check sType it will be 6 which is the Date type. ActiveDocument.ContentControls(sCC_ID).Type = wdContentControlDate ActiveDocument.ContentControls(sCC_ID).DateDisplay Format = sDate_Format 'We also have to rest date display, e.g. MM/dd/YYY ActiveDocument.ContentControls(sCC_ID).DateStorage Format = sDate_Storage 'We also have to rest date storage format, e.g. date only End If I also wanted to note that I needed to put a DoEvents after the Delete as I found that date controls were not always being undeleted (and as I mentioned, it wasn't being undeleted as a Date control). It may be that was because it wasn't being undeleted as a Date control it had to take extra time to decide what to restore it as, and because on top of that my CC was nested 3 deep, or just because. In any event. Adding the DoEvents there seems to have solved that. I also found that it was having problems with CC.Delete so when I found my CC I saved its ID to sCC_ID and then replaced CC.Delete with: ActiveDocument.ContentControls(sCC_ID).Delete |
Thread Tools | |
Display Modes | |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Content Control Copy - Copies Data and CC itself | shammi_raj | Word | 3 | 03-30-2016 07:01 PM |
Is there VBA to paste text into content control? | kintap | Word VBA | 2 | 07-02-2014 07:42 AM |
Copy content control entries to next table next page | Mel_Herndon | Word VBA | 2 | 05-22-2014 05:07 PM |
Deleting a table from a content control -- preserving the content control | BrainSlugs83 | Word Tables | 8 | 11-14-2013 03:06 AM |
Templates: automatic text generation from Rich Text content control | Chickenmunga | Word | 0 | 10-01-2008 11:16 AM |