![]() |
|
#1
|
|||
|
|||
|
Hi,
I have a bookmark which contains text and sometimes also a table. Is there an opportunity to delete the whole bookmark containing a table and set a new one in which should sometimes be another table? Thanks
|
|
#2
|
||||
|
||||
|
The short answer is yes. You can set a range to the bookmark range, then replace the range content with your new content, then reapply the bookmark to the range. (See for example the FillBM function at http://www.gmayor.com/word_vba_examples.htm.) If you need more information then supply more information about what you are doing.
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#3
|
|||
|
|||
|
Tanks for your answer. The problem is that all this functions only allow to insert a new text. I would like to insert a text and a table and both should be the new range for the bookmark.
Sorry, I could have described it more precisely. |
|
#4
|
|||
|
|||
|
Ok, I´m going to describe my problem more detailed:
I have a dropdown with 3 entries (Hi, Hello, Welcome). Then I have a bookmark in this form: Some Text -blank space as a bookmark- Some Text According to what I choose I want to change the content of the bookmark. Hi: " " Hello: newline & "Some new Text: " & newline Welcome: newline & a table & newline The first two cases are not too hard I think: This is a sub to call a makro according to which entry is choosen: Code:
Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)
Dim Text As String
Dim Empty As String
Text = vbCrLf & "Some new Text: " & vbCrLf
Empty = " "
Select Case CC.Tag
Case Is = "Tagname"
Select Case CC.Range.Text
Case Is = "Hi"
Call ChangeText(Empty)
Case Is = "Hello"
Call ChangeText(Text)
Case Is = "Welcome"
Call ???
End Select
End Select
End Sub
Code:
Sub ChangeText(ByVal Text As String)
Application.ScreenUpdating = False
Selection.GoTo What:=wdGoToBookmark, Name:="TestBookMark"
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.InsertAfter Text
ActiveDocument.Bookmarks.Add Range:=Selection.Range, _
Name:="TestBookMark"
Selection.Collapse
Application.ScreenUpdating = True
End Sub
Appreciating your help
|
|
#5
|
||||
|
||||
|
You could try something based on:
Code:
Sub UpdateBookMark()
Dim BmkNm As String, NewTxt As String, BmkRng As Range, vUpdType As Variant, Tbl As Table
BmkNm = InputBox("Bookmark Name")
vUpdType = InputBox("Bookmark Update Kind" & vbCr & _
"1. Predefined Text" & vbCr & _
"2. A Table & Predefined Text" & vbCr & _
"3. Variable Text")
With ActiveDocument
If .Bookmarks.Exists(BmkNm) Then
Set BmkRng = .Bookmarks(BmkNm).Range
With BmkRng
Select Case vUpdType
Case 1
.Text = "Predefined Text"
Case 2
.Delete
.InsertBefore vbCr & vbCr
Set Tbl = .Tables.Add(Range:=.Characters.Last, Numrows:=5, NumColumns:=5)
With Tbl
'do stuff with the table
End With
.Start = Tbl.Range.Start - 1
.Characters.First.InsertBefore "Predefined Start Text"
.End = Tbl.Range.End + 1
.Characters.Last.InsertAfter "Predefined End Text"
Case 3
.Text = InputBox("New Bookmark Text")
Case Else
GoTo ErrExit
End Select
End With
.Bookmarks.Add BmkNm, BmkRng
Else
MsgBox "Bookmark: " & BmkNm & " not found."
End If
End With
ErrExit:
Set BmkRng = Nothing: Set Tbl = Nothing
End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#6
|
|||
|
|||
|
Thanks a lot for your solution.
![]() I tried it and it works but I have some problems with a new line. Heres my modified code: Code:
Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)
Dim BmkNm As String, BmkRng As Range, Tbl As Table
With ActiveDocument
If .Bookmarks.Exists("Text") Then
Set BmkRng = .Bookmarks("Text").Range
With BmkRng
Select Case CC.Tag
Case Is = "Tagname"
Select Case CC.Range.Text
Case Is = "Hi"
.Delete
.Text = ""
Case Is = "Welcome"
.Delete
.InsertBefore " " & vbCr
Set Tbl = .Tables.Add(Range:=.Characters.Last, NumRows:=7, NumColumns:= _
2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed)
With Tbl
.Cell(1, 1).Range.Text = "Text 1"
.Cell(2, 1).Range.Text = "Text 2"
.Cell(2, 1).Range.Font.Bold = True
.Cell(3, 1).Range.Text = "Text 3"
.Cell(4, 1).Range.Text = "Text 4"
.Cell(5, 1).Range.Text = "Text 5"
.Cell(6, 1).Range.Text = "Text 6"
.Cell(7, 1).Range.Text = "Text 7"
End With
.Start = Tbl.Range.Start - 2
.Characters.First.InsertBefore " "
.End = Tbl.Range.End + 1
.Characters.Last.InsertAfter vbCr & " "
Case Is = "Hello"
.Delete
.Text = vbCr & " Some new Text: " & vbCr
Case Else
GoTo ErrExit
End Select
End Select
End With
.Bookmarks.Add "Text", BmkRng
Else
MsgBox "Bookmark not found."
End If
End With
ErrExit:
Set BmkRng = Nothing: Set Tbl = Nothing
End Sub
I suppose this is because I add a new line after the end of the bookmark in "Welcome". Is there a way to extend the bookmark so that this new line is deleted when I choose something else? By the way: In my document there are two blank spaces at the beginning of each line.. Thanks for helping
|
|
#7
|
||||
|
||||
|
Assuming you have a complete paragraph bookmarked, the following should work:
Code:
Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)
Dim BmkNm As String, BmkRng As Range, Tbl As Table
With ActiveDocument
If .Bookmarks.Exists("Text") Then
Set BmkRng = .Bookmarks("Text").Range
With BmkRng
Select Case CC.Tag
Case Is = "Tagname"
Select Case CC.Range.Text
Case Is = "Hi"
.Text = ""
Case Is = "Welcome"
Set Tbl = ActiveDocument.Tables.Add(Range:=BmkRng, NumRows:=7, NumColumns:= _
2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed)
With Tbl
.Cell(1, 1).Range.Text = "Text 1"
.Cell(2, 1).Range.Text = "Text 2"
.Cell(2, 1).Range.Font.Bold = True
.Cell(3, 1).Range.Text = "Text 3"
.Cell(4, 1).Range.Text = "Text 4"
.Cell(5, 1).Range.Text = "Text 5"
.Cell(6, 1).Range.Text = "Text 6"
.Cell(7, 1).Range.Text = "Text 7"
End With
Tbl.Range.Next.InsertBefore vbCr
.End = Tbl.Range.End + 1
Case Is = "Hello"
.Text = " Some new Text: " & vbCr
Case Else
GoTo ErrExit
End Select
End Select
End With
.Bookmarks.Add "Text", BmkRng
Else
MsgBox "Bookmark not found."
End If
End With
ErrExit:
Set BmkRng = Nothing: Set Tbl = Nothing
End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#8
|
|||
|
|||
|
Hi,
Thanks for your answer. It does work very good. But when I cklick on "Hello" and afterwards on "Welcome" the line with " Some new Text:" isnt´t deleted. When i first click on "Hi" and then on "Welcome" it works and also for "Hi" and "Hello". But the text is marked as bookmark. Do you also have a solution for this?
|
|
#9
|
|||
|
|||
|
Sorry, I fixed it.
Once again: Thank you very much for your help
|
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
Form updating Bookmarks - writes to the bookmarks multiple times
|
PeterPlys | Word VBA | 13 | 01-14-2015 06:41 AM |
TOC hyperlinks and bookmarks.
|
GregCFII | Word | 9 | 03-02-2014 06:43 AM |
| Can't See Bookmarks | bobmayo | Word | 21 | 06-04-2013 07:37 AM |
Table of Bookmarks
|
Niy | Word | 3 | 03-28-2012 12:18 AM |
| Bookmarks for a PDF? | Ownaholic | Word | 0 | 10-30-2010 12:27 AM |