VBA - 自定义插件在笔记本电脑上完美运行,但在其他计算机上不起作用
Posted
技术标签:
【中文标题】VBA - 自定义插件在笔记本电脑上完美运行,但在其他计算机上不起作用【英文标题】:VBA - Custom Plugin works perfectly on laptop however does not work on other computers 【发布时间】:2017-12-01 22:11:42 【问题描述】:我目前遇到了一个自定义插件的问题,该插件是我的老板分配给我的,在分配它时还没有经过全面测试和开发。它是一个字母模板生成器,它从 Access 中获取值(字母类型、帐户类型、代理列表等),它在 Excel 中生成一个工作表,用户可以根据 Word 文档中的书签输入值。
Access 和 Excel 之间的通信似乎很好,问题是当数据从 excel 到 word 时,我的代码的一部分删除了 word.formfields 用书签替换它们,然后根据用户在 Excel 表中输入,这部分代码在我的工作笔记本电脑和工作桌面上运行良好,但在使用该工具的顾问的桌面上运行良好。
关于它的奇怪之处在于删除 word.formfield 很好,只是更改书签不起作用。以下是似乎仅在某些计算机上出现故障的代码:
下面更新书签的 if 语句是检查特定书签以分配它们,不幸的是我无法在此处链接该代码。
我已经检查了另一台计算机的安全设置和版本号,它们和我的一样,所以我真的不知道是什么原因造成的......
更新书签:
ElseIf wdDoc.Bookmarks.Exists(arrDefault(1, i)) Then
updateBookmark CStr(arrDefault(1, i)), arrDefault(2, i), arrDefault(3, i)
End If
更新书签子程序:
Private Sub updateBookmark(bookmarkname As String, bookmarkValue As Variant, ValueType As String)
Dim BMRange As Word.Range
DeleteFormFields (bookmarkname)
Set BMRange = wdapp.ActiveDocument.Bookmarks(bookmarkname).Range
'if the language is French
If InStr(1, UCase(strLang), "FRENCH") <> 0 Then
Select Case ValueType
Case "Date"
If bookmarkname = "TodaysDate" Then
BMRange.Text = bookmarkValue
Else
BMRange.Text = CStr(Application.WorksheetFunction.Text(bookmarkValue, "[$-040c]d mmmm, yyyy"))
End If
Case "String", "Long", "Integer"
BMRange.Text = bookmarkValue
Case "Currency"
BMRange.Text = Format(bookmarkValue, "$#,##0.00")
End Select
'if the language is English
Else
Select Case ValueType
Case "String", "Long", "Integer"
BMRange.Text = bookmarkValue
Case "Currency"
BMRange.Text = Format(bookmarkValue, "$#,##0.00")
Case "Date"
If bookmarkname = "TodaysDate" Then BMRange.Text = Format(bookmarkValue, "MMMM D, YYYY")
BMRange.Text = Format(bookmarkValue, "MMMM D YYYY")
End Select
End If
wdapp.ActiveDocument.Bookmarks.Add bookmarkname, BMRange
End Sub
【问题讨论】:
不相关,但你的ValueType
参数闻起来像是可以使用一些 VbVarType
枚举而不是这些字符串类型的硬编码值。
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。见minimal reproducible example。
“不工作”和“故障”并不能告诉我们运行代码时实际发生的情况。您是否看到错误,如果有,究竟是哪些错误?什么都没有发生?
ValueType 是个好主意,我会将其转换为枚举而不是继续前进:)。
我会更具体一点。本质上真正的问题是,下面的代码在我的计算机上说书签存在,而在其他计算机上间歇性地说书签存在。这意味着如果一个文档有 15 个书签,它将跳过 2 个书签,就好像它们不存在一样。
【参考方案1】:
我找到了答案!缺少一个名为“Month”的 ValueType 这导致书签没有更新......至于引用它们很好......感谢那些花时间研究这个的人。
【讨论】:
以上是关于VBA - 自定义插件在笔记本电脑上完美运行,但在其他计算机上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
VBS 在一台服务器上运行 .xlsm 工作簿中的 VBA 宏,但在另一台服务器上运行良好
Node.js,基于 socket-io 的一对一聊天引擎在本地运行良好,但在使用 ngrok 在不同笔记本电脑上运行时无法运行
Aweber 表单在 ios7、iPad 或 iPhone 上不工作(但在笔记本电脑上工作)