用于重新链接Word文档的VB宏问题

时间:2016-02-09 19:53:46

标签: vba excel-vba excel

我无法让这个宏工作。我正在使用Office 2013的Windows 10计算机上工作。代码不是由我编写的,而且我对VB的知识有限。 marco应该通过镜像前一个word文档的链接来更新word文档的链接。下面是代码,如果有人可以提供帮助那就太棒了。

Sub relinking()

Dim oriacro As String
Dim taracro As String
Dim path As String

oriacro = InputBox(Prompt:="please enter the original agency acronym.", Title:="ENTER THE ORIGINAL AGENCY ACRONYM")
taracro = InputBox(Prompt:="please enter the target agency acronym.", Title:="ENTER THE TARGET AGENCY ACRONYM")
path = InputBox(Prompt:="please enter the target path.", Title:="ENTER THE TARGET PATH")

Excel.Application.Quit
'close all the excel files.(excel reference has to be activated in tool->reference'

For x = 1 To ActiveDocument.Fields.Count
'the program runs over all the linked fields'

If Left(ActiveDocument.Fields(x).LinkFormat.SourceNam e, Len(oriacro)) = oriacro Then
'read all the fields that has "original agency acronym" in the beginning of its linked excel files.'
ActiveDocument.Fields(x).LinkFormat.SourceFullName = path & "\" & taracro & "_" & Right(ActiveDocument.Fields(x).LinkFormat.SourceNa me, Len(ActiveDocument.Fields(x).LinkFormat.SourceName ) - InStr(ActiveDocument.Fields(x).LinkFormat.SourceNa me, "_"))
'Assign the fields with new links that are created from combining the "target path" ,"target agency acronym", and the parts of the names right after the original acronyms of the original linked file names.'
Else
'Leave other linked fields as they are.'
End If
Next x

MsgBox ("All Fields have been relinked!")
End Sub 

1 个答案:

答案 0 :(得分:0)

1)上面代码中的几个拼写错误,可能只是在StackOverflow上格式化:.SourceNam e几次。同样在创建新路径的函数中:

Right(ActiveDocument.Fields(x).LinkFormat.SourceNa me, Len(ActiveDocument.Fields(x).LinkFormat.SourceName ) - InStr(ActiveDocument.Fields(x).LinkFormat.SourceNa me, "_")). 

还要添加一个字符串变量并在msgbox中捕获其中一个来测试:

If Left(ActiveDocument.Fields(x).LinkFormat.SourceNam e, Len(oriacro)) = oriacro Then

    'read all the fields that has "original agency acronym" in the beginning of its linked excel files.'
    str = ActiveDocument.Fields(x).LinkFormat.SourceName 'Dim str variable above if necessary
    ActiveDocument.Fields(x).LinkFormat.SourceFullName = path & "\" & taracro & "_" & Right(str, InStrRev(str, "_")-1)
    'Assign the fields with new links that are created from combining the "target path" ,"target agency acronym", and the parts of the names right after the original acronyms of the original linked file names.'
    msgbox ActiveDocument.Fields(x).LinkFormat.SourceFullName   'does this message show the proper path??
Else
    'Leave other linked fields as they are.'
End If
ActiveDocument.Fields.Update