【问题标题】:System.PrivateProfileString Word VBA not working since Office (Word) update version 1910System.PrivateProfileString Word VBA 自 Office (Word) 更新版本 1910 起无法正常工作
【发布时间】:2020-02-23 01:17:08
【问题描述】:

我有一些旧代码使用 Microsoft Word VBA System.PrivateProfileString 来读取 Windows 注册表中的 DWORD 条目。过去,它会为 String 和 DWORD 注册表项返回正确的值。现在,在 Office 365 更新到版本 1910 后,当读取 DWORD 值时,它会插入一个前导字符(可能是“空”或一些“随机”字符),这当然会导致以下代码中的注册表项验证失败。

这是一个示例

key = System.PrivateProfileString("", "HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Microsoft Outlook", "MSIInstallOnWTS")
MsgBox key

结果可能类似于 (squarebox) []1 或 g541

我将 Office 365/Word 2016 降级到版本 1909 build 12130.20272,结果符合预期。它有效。

重写代码以直接使用 Win API 而不是内置的 Word System.PrivateProfileString 函数是解决方案,但我想避免重写代码和部署。

这是一个错误,还是我必须重新编写所有使用 System.PrivateProfileString 的代码?

更新:经过进一步调查,第一个字符不是随机的。它是注册表中 DWORD 值的 ASCII 字符。因此,如果您的 DWORD 值为 1,您会看到一个方框和一个 1。如果您的 DWORD 值为十进制 65(41 十六进制),您将看到 A65,而 97(x61)的 DWORD 返回值为 a97。如果值 > 255 则从 ascii 65 (A) 开始

Microsoft Word click2run 版本 1910(内部版本 12130.20410)也有这个问题。

【问题讨论】:

  • FWIW 我在这里看到了同样的情况,但在 Windows 10 1903 中。我猜这是 Microsoft 的 Windows 或 Office 代码中的某个错误。在这里,我没有可能妨碍您的软件,例如 3rd 方病毒检查器,但我没有排除所有可能的插件。可能值得通过 Word 的笑脸机制进行报告,但我不希望得到回应。
  • 问题不清楚:是否总是相同的字符code?或者是否存在可辨别的模式,具体取决于从注册表项返回的值?
  • 我使用的 Windows 10 的版本是 1903,但版本 1909 的结果相同。我使用的 Word 版本是 1910 Build 12130.20344。我已使用 Word 中的反馈向 Microsoft 报告。如果返回值为 0,则没有前导字符。如果返回值为 1,则前导字符为方形字符。如果返回值是其他数字,则前导字符是其他值。

标签: vba ms-word


【解决方案1】:

Microsoft 确认这是一个错误。

“Word 工程团队已找到错误的原因并已对其进行修复。我们的目标是在本月的 1 月分叉版本中进行修复;最终的测试验证仍需完成,以确认此修复可以针对那个叉子。

再次感谢您向我们报告此错误!

谢谢你, Microsoft Word 团队”

在 Microsoft Word 当前版本 2001 中尚未修复(构建 12430.20288 点击运行)

【讨论】:

    猜你喜欢
    • 2015-06-28
    • 2016-11-25
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多