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 - 自定义插件在笔记本电脑上完美运行,但在其他计算机上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

VBA 2010 - CDate 类型不匹配问题

VBS 在一台服务器上运行 .xlsm 工作簿中的 VBA 宏,但在另一台服务器上运行良好

Node.js,基于 socket-io 的一对一聊天引擎在本地运行良好,但在使用 ngrok 在不同笔记本电脑上运行时无法运行

Aweber 表单在 ios7、iPad 或 iPhone 上不工作(但在笔记本电脑上工作)

node js mongodb回调不起作用-下面的代码在我的笔记本电脑上有效,但在另一台PC上无效

支持自定义组件后的BdTab新标签页插件更加完美