通过VBA删除Word模板的内部链接

通过VBA删除Word模板的内部链接,vba,ms-word,Vba,Ms Word,我正在尝试创建一个小的VB应用程序,它可以删除Word文档中指向模板的内部链接 我找到了这本指南 我正试图修改它,用VBA代替Office内部的宏编程 然而,我被困在如何获取文档上。开始工作吧。感谢您的帮助 这应该作为一个独立的应用程序运行,而不是在Word中运行。 我正在寻找一种方法来执行宏的功能,但不是从Word内部执行。这里有两条坏消息 1) 文档必须有一个模板。您不能删除它,只能将其更改为其他内容 2) 无论如何,更改模板不会起任何作用。看 我想知道Open方法的问题是否在于您试图打开“

我正在尝试创建一个小的VB应用程序,它可以删除Word文档中指向模板的内部链接

我找到了这本指南 我正试图修改它,用VBA代替Office内部的宏编程

然而,我被困在如何获取文档上。开始工作吧。感谢您的帮助

这应该作为一个独立的应用程序运行,而不是在Word中运行。
我正在寻找一种方法来执行宏的功能,但不是从Word内部执行。

这里有两条坏消息

1) 文档必须有一个模板。您不能删除它,只能将其更改为其他内容

2) 无论如何,更改模板不会起任何作用。看

我想知道Open方法的问题是否在于您试图打开“.doc”扩展文件,而不是现代的“.docx”扩展文件。链接到的VBA子例程只处理“.doc”文件。此VBA代码执行以下两项操作:

Function StringEndsWith( _
    ByVal strValue As String, _
    CheckFor As String) As Boolean

  Dim sCompare As String
  Dim lLen As Long

  lLen = Len(CheckFor)
  If lLen > Len(strValue) Then Exit Function
  sCompare = Right(strValue, lLen)
  StringEndsWith = StrComp(sCompare, CheckFor, vbTextCompare) = 0
End Function


Sub ChangeTemplates()
    Dim strDocPath As String
    Dim strTemplateB As String
    Dim strCurDoc As String
    Dim docCurDoc As Document

    ' set document folder path and template strings
    strDocPath = "C:\tmp\"

    ' get first doc - only time need to provide file spec
    strCurDoc = Dir(strDocPath & "*.doc*")

    ' ready to loop (for as long as file found)
    Do While strCurDoc <> ""
        If (StringEndsWith(strCurDoc, ".doc") Or StringEndsWith(strCurDoc, ".docx")) Then
            ' open file
            Set docCurDoc = Documents.Open(FileName:=strDocPath & strCurDoc)
            ' change the template back to Normal
            docCurDoc.AttachedTemplate = ""
            ' save and close
            docCurDoc.Close wdSaveChanges
        End If
        ' get next file name
        strCurDoc = Dir
    Loop
    MsgBox "Finished"
End Sub
函数StringEndsWith(_
ByVal strValue作为字符串_
检查是否为字符串)是否为布尔值
像弦一样暗淡
暗淡如长
lLen=Len(检查)
如果lLen>Len(标准值),则退出函数
sCompare=Right(标准值,lLen)
StringEndsWith=StrComp(sCompare、CheckFor、vbtextcomper)=0
端函数
子模板()
作为字符串的Dim strDocPath
将strTemplateB变为字符串
作为字符串的Dim strCurDoc
Dim docCurDoc作为文档
'设置文档文件夹路径和模板字符串
strDocPath=“C:\tmp\”
'获取第一个文档-仅需要提供文件规范的时间
strCurDoc=Dir(strDocPath&“*.doc*”)
'准备循环(只要找到文件)
当strCurDoc“”时执行
如果(StringEndsWith(strurdoc,“.doc”)或StringEndsWith(strurdoc,“.docx”)),则
'打开文件
设置docCurDoc=Documents.Open(文件名:=strDocPath&strCurDoc)
'将模板更改回正常状态
docCurDoc.AttachedTemplate=“”
“保存并关闭
docCurDoc.Close wdSaveChanges
如果结束
'获取下一个文件名
strCurDoc=Dir
环
MsgBox“已完成”
端接头

回答间隔时间较长,但可能对其他人有用。如果您有权访问Word文档[Alt F11]的VBE,并且希望删除引用,请转到“工具/引用”[顶部菜单]并从引用文件列表中取消选择它。我遇到了一个类似的问题,模板不再存在,但它仍然在项目窗口中被“引用”,所以我做了上述操作。

对不起,我对VBA/宏和标签的引用有点困惑
visual-studio-2010
VBA
。VBA是Office内部使用的宏语言。您是否试图在VS或VSTO中通过互操作实现这一点(这不是VBA应用程序,而是VS应用程序)?
文档的哪一部分打开时会绊倒您?您是否正在尝试将引用的代码放入
文档中。打开
事件接收器?我已更改了您的标记以匹配您的问题,但如果我弄错了,请更改它们并澄清您的问题。请提供更多有关Document.Open.Hej的详细信息。。。您是否正在从您提到的页面上寻找有关第一个或第二个宏的帮助?我们最近将模板迁移到了一个不同名称的服务器上,由于Word试图访问不存在的模板,一些文档的打开速度变得非常慢。此过程修复了这些文档启动缓慢的问题。因此,更改模板确实可以做一些事情。。。