NSMone
asked on
Redirect dead links in Word documents
I've approx 50.000 WORD (2000) documents, inside every document is hiding a dead network link (server that not exist anymore) like this \\server\folder\folder... , so if i want to eliminate links i need too open every word document and remove link manually,
is that any other way i can avoid to examine 50.000 documents and do it automatically,
i try in local DNS to follow that link (dead server) to redirect on another server, but it didn't help..
please help...
is that any other way i can avoid to examine 50.000 documents and do it automatically,
i try in local DNS to follow that link (dead server) to redirect on another server, but it didn't help..
please help...
ASKER
in Word doks that is define a networks connection \\someserver\xx\xx
in DNS i define that server word dok was looking for...
in DNS i define that server word dok was looking for...
If the DNS route doesn't work out, you can run a Word macro to remove the links. The macro in the snippet will run through a folder and any subfolders unlinking the link fields with a particular path in the contained documents. The path is hard-coded, so you will have to make sure that it point to the right placce.
Call the macro so:
FindDocs "C:MyTopFolder", "*.doc"
Call the macro so:
FindDocs "C:MyTopFolder", "*.doc"
Sub FindDocs(strFolder As String, strFilePattern As String)
Dim strFileName As String
Dim strFolders() As String
Dim iFolderCount As Integer
Dim i As Integer
Dim Doc As Document
'collect child folders
strFileName = Dir$(strFolder & "\", vbDirectory)
Do Until strFileName = ""
If (GetAttr(strFolder & "\" & strFileName) And vbDirectory) = vbDirectory Then
If Left$(strFileName, 1) <> "." Then
ReDim Preserve strFolders(iFolderCount)
strFolders(iFolderCount) = strFolder & "\" & strFileName
iFolderCount = iFolderCount + 1
End If
End If
strFileName = Dir$()
Loop
'process files in current folder
strFileName = Dir$(strFolder & "\" & strFilePattern)
Do Until strFileName = ""
DoEvents
Set Doc = Documents.Open(strFolder & "\" & strFileName)
Unlinks Doc 'call the unlink procedure
If Doc.Saved Then
Doc.Close wdDoNotSaveChanges
Else
Doc.Close wdSaveChanges
End If
strFileName = Dir$()
Loop
'look through child folders
For i = 0 To iFolderCount - 1
FindDocs strFolders(i), strFilePattern
Next i
End Sub
Sub Unlinks(Doc As Word.Document)
Dim fld As Field
For Each fld In Doc.Fields
If fld.Type = wdFieldLink Then
If fld.LinkFormat.SourcePath = "\\server\folder\folder" Then
fld.Unlink
End If
End If
Next fld
End Sub
What happens if you ping the server you from a workstation using the name you have put in DNS? Do you get a reply?
ASKER
in word document link refer to a old server so i change server in DNS ...
Yes i know what you've done.
Can you click Start>Run and type NSLOOKUP
Then at the prompt type in the name of the server that you are refering to in Word and press enter...what happens?
Can you click Start>Run and type NSLOOKUP
Then at the prompt type in the name of the server that you are refering to in Word and press enter...what happens?
ASKER
in NSLOOKUP looks all well, it refer to the new server..
the old server was 192.xx.xx.x7
the new server is 192.xx.xx.x9
so it refer to a new server ... that think should be OK
the old server was 192.xx.xx.x7
the new server is 192.xx.xx.x9
so it refer to a new server ... that think should be OK
ASKER
how do i EXEC that VB file , and where should i place it ?
ASKER
can i use Wildcard
in that VB script ?
....
If fld.LinkFormat.SourcePath = "\\server\*" Then
.....
in that VB script ?
....
If fld.LinkFormat.SourcePath = "\\server\*" Then
.....
Put the VBS script in the top level directory where your word documents are located.
If you put the script on C:\ Drive then all the subfolders on C:\ will be searched.
If you put the script on C:\ Drive then all the subfolders on C:\ will be searched.
No you cannot use a wildcard.
But you could put:
If fld.LinkFormat.SourcePath = "\\server\" Then ... (Without the *)
But you could put:
If fld.LinkFormat.SourcePath = "\\server\" Then ... (Without the *)
ASKER
Document are on server,
but word documents are accessible thru the network and opening on clients computers...
not all document have the same path, but all of them have same start path \\server\
could be possible to put wildcard like this " \\server\* "
but word documents are accessible thru the network and opening on clients computers...
not all document have the same path, but all of them have same start path \\server\
could be possible to put wildcard like this " \\server\* "
ASKER
VB script should i put that on server or client side ?
The code is actually written as a Word macro, not as VBScript.
You can adapt it to look for the start of the string.
'...
If InStr(1, fld.LinkFormat.SourcePath, "\\server", vbTextCompare) = 1 Then
fld.Unlink
End If
'...
You can adapt it to look for the start of the string.
'...
If InStr(1, fld.LinkFormat.SourcePath,
fld.Unlink
End If
'...
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
You should be able to trick Word if you configure DNS correctly.