【问题标题】:Strange behavior of VBS/VBA Script (working only on some machines, on others Word is crashing)VBS/VBA 脚本的奇怪行为(仅在某些机器上工作,在其他机器上 Word 崩溃)
【发布时间】:2015-07-02 14:49:46
【问题描述】:

我的一个脚本有问题。 我将一个 Public-Sub 例程注入用户 Normal.dotm(注入“ThisDocument”)。 该脚本工作正常,但只有一个客户端。 (在它不起作用的客户端上,Word Process 正在崩溃,见下文......) 如果有经验的程序员可以看看我的编码,或者告诉我如何调试出了什么问题,我会很好。 所有变量均已正确填写,并且客户端都是具有相同策略的 Win7 Enterprise。 normal.dotm 也在每台机器上的相同位置。 • 在所有客户端上都设置了“对 VBA 项目对象模型的信任访问”。

有什么想法吗?

这是完整的代码:

' 22.04.2015 
' Imports the CRM WordMerge Function into the Normal.dot


' Homefolder als Variable bereitstellen

Set oShell = CreateObject("WScript.Shell")

strHomeFolder = oShell.ExpandEnvironmentStrings("%APPDATA%")
' wscript.echo strHomeFolder

' Auslesen des aktuellen Verzeichnisspfades

scriptdir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
' WScript.Echo scriptdir

' Get current User
Set objNetwork = CreateObject("Wscript.Network")

' Backup der Originalen Normal.dotm

dim filesys

set filesys=CreateObject("Scripting.FileSystemObject")

' Existierendes Backup löschen
If filesys.FolderExists(scriptdir & "\Backup\" & objNetwork.UserName) Then
filesys.DeleteFolder scriptdir & "\Backup\" & objNetwork.UserName
end if

' File mit Pfad zur normal.dotm einlesen:
strdatei=scriptdir & "\Path\path.txt"
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTest = objFSO.GetFile(strdatei)
If objTest.Size > 0 Then
Set objFile = objFSO.OpenTextFile(strdatei, ForReading)
strText = objFile.ReadAll
strText = oShell.ExpandEnvironmentStrings(strText)
'wscript.echo strText
objFile.Close
end if 





If filesys.FileExists(strText) Then
' MsgBox(scriptdir & "\Backup\" & objNetwork.UserName)
filesys.CreateFolder scriptdir & "\Backup\" & objNetwork.UserName
filesys.CopyFile strText, scriptdir & "\Backup\" & objNetwork.UserName & "\"
end if



const wdDoNotSaveChanges = 0

 WScript.Echo "Installing FrNow Macro for Word..."
' Dim oApplication, doc
Dim oApplication, doc
Set oApplication = CreateObject("Word.Application")

' WScript.Echo "Opening Normal.dot Template..."
oApplication.Documents.Open strText
Set doc = oApplication.ActiveDocument

Dim comp, components
Set components = oApplication.ActiveDocument.VBProject.VBComponents


' Importiere CRM Makro
  oApplication.ActiveDocument.VBProject.VBComponents("ThisDocument").CodeModule.AddFromFile(scriptdir & "\Import\FrNow.cls")

WScript.Echo "Installation Finished..."

doc.close wdDoNotSaveChanges

oApplication.Quit wdDoNotSaveChanges

【问题讨论】:

  • 我认为让您访问VBProject的参数是您需要手动检查Office参数才能使用您的代码
  • 您能否详细解释一下,我该如何检查 - 我在这一行中看不到任何客户特定的内容?
  • 详细信息在我下面的回答中,我在回答中的评论中添加了另一个可能对您有所帮助的线索

标签: vba vbscript scripting ms-word


【解决方案1】:

https://support.microsoft.com/en-us/kb/282830

任何自动化客户端都能够访问 VBA 对象模型 以编程方式,运行代码的用户必须明确授予 使用权。要打开访问权限,用户必须按照以下步骤操作。办公室 2003 和 Office XP

打开有问题的 Office 2003 或 Office XP 应用程序。在 工具菜单,单击宏,然后单击安全以打开宏 安全对话框。

在“受信任的来源”选项卡上,单击以选择“信任对 Visual 的访问” 基本项目复选框以打开访问权限。

单击“确定”应用设置。

您可能需要重新启动应用程序才能使代码正常运行 如果您从组件对象模型 (COM) 加载项自动化或 模板。办公室 2007

打开有问题的 2007 Microsoft Office system 应用程序

单击 Microsoft Office 按钮,然后单击应用程序选项。

单击信任中心选项卡,然后单击信任中心设置。

点击宏设置选项卡,点击选择信任访问 VBA 项目对象模型复选框,然后单击确定。点击确定。

【讨论】:

  • 正如我最初的问题中所引用的那样,在执行之前,我已经在 Word 中设置了“信任对 VBA 项目对象模型的访问”。否则无论如何你都会得到一个错误......问题一定是别的,但我没有得到任何错误,它在一些客户端上工作,而在一些客户端上却没有......
  • 你检查过ReferenceMicrosoft Scripting Runtime吗? ThisWorkbook.VBProject.References.AddFromFile xRef 在代码中或那里获取更多详细信息:stackoverflow.com/questions/3233203/…
  • 感谢您的建议,不知道,但是在我自己的计算机上,我没有激活 MS-Scripting Runtime。我只有活动:Visual Basic for Applications Microsoft Word 14.0 Object Library OLE Automation Microsoft Office 14.0 library Microsoft Forms 2.0 object Library 如果需要其中一些,是否可以通过脚本加载它们?
  • 是的,这个链接应该可以帮助你:stackoverflow.com/questions/9879825/… 你只需要获取你想要加载的细节参考的 GUID 并将它添加到你的 Workbook_OpenDocument_Open 事件中! ;)
  • 太好了,它现在可以在所有客户端上运行,按照您的建议进行更改:Set oApplication = CreateObject("Word.Application") oApplication.NormalTemplate.OpenAsDocument 非常感谢您的大力帮助!!!仍然存在一个问题:是否可以在导入之前检查模块中是否已经存在同名的 Sub? (如果我多次执行它总是会导入 sub,所以我最终会得到一个混乱的 normal.dotm)这没什么大不了的,但用户应该自己执行它,我想让它成为白痴证明 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-20
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
相关资源
最近更新 更多