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
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