Find BookMarks using VBA
BookMarks are vital in Word. However, when you look for a particular bookmark using VBA, it will cease to exist causing 5101 - This bookmark does not exist error.
To avoid this it is better to use Exists Method to check if the Bookmark exist.
Sub Check_If_BookMark_Exists()
If ActiveDocument.Bookmarks.Exists("TempBKMK") = True Then
ActiveDocument.Bookmarks("TempBKMK").Range.Text = "Something"
End If
End Sub
Exists method determines whether the specified bookmark or task exists. Returns True if the bookmark or task exists
Monday, March 31, 2008
Download Windows Live Toolbar and personalize your Web experience! Add custom buttons to get the information you care about most.
Thanks a lot! Just what I was looking for, and it worked like a charm.
ReplyDeleteThank you so much. I needed this due to newly corrupted bookmarks and had been futile-ly trying things for hours till I found this. You have helped me immensely.
ReplyDeleteJohn D.
I have extend this code with some other snippets to check for broken Bookmarks and URLs.
ReplyDeleteHere the code, some people might finf it useful:
Regards
Henrik
Option Explicit
Private Declare Function IsValidURL Lib "urlmon" (ByVal pBC As Long, _
url As Byte, ByVal dwReserved As Long) As Long
Sub x()
'
' x Macro
' Macro recorded 7/19/2007 by David Chinell
'
Dim objWorkRange As Range
Dim objField As Field
Dim aryCode() As String
Dim strFileName As String
Dim AllLinksValid As Boolean
' Set this to handle bad file formats
On Error Resume Next
' Work from the current insertion point down
Set objWorkRange = ActiveDocument.Range
objWorkRange.Start = Selection.Start
' Find all the hyperlinks
AllLinksValid = True
For Each objField In objWorkRange.Fields
' For each hyperlink, split out the filename
If objField.Type = wdFieldHyperlink Then
aryCode = Split(objField.Code, """")
strFileName = aryCode(1)
' Test whether the file exists
If ActiveDocument.Bookmarks.Exists(strFileName) <> True Then
If Not ValidURL(strFileName) Then
' The file is missing
objField.Select
AllLinksValid = False
Exit For
End If
End If
End If
Next objField
Set objWorkRange = Nothing
If AllLinksValid Then
MsgBox _
Prompt:="All links and bookmarks are valid!" & vbNewLine, _
Buttons:=vbInformation, _
Title:="LazyButt Tools"
Else: _
MsgBox Prompt:="This link is invalid:" & _
vbNewLine & strFileName _
, Buttons:=vbInformation _
, Title:="LazyButt Tools"
End If
End Sub
Function ValidURL(ByVal url As String) As Boolean
Dim b() As Byte
' We need this because we're passing a Unicode string
b = url & vbNullChar
If IsValidURL(0, b(0), 0) = 0 Then
ValidURL = True ' valid URL
Else
ValidURL = False ' invalid URL
End If
End Function
Actually I was looking for exactly this - to check for broken links using VBA. Thanks to the 'Anonymous' who posted it
ReplyDeleteWow, what a valuable code, thanks Henrik!
ReplyDelete