【问题标题】:opening workbook error code 32809 on one computer but not the other computer在一台计算机上打开工作簿错误代码 32809,但在另一台计算机上没有
【发布时间】:2017-05-17 22:45:40
【问题描述】:

我有一个 excel 2013 宏工作簿。

此工作簿在过去 6 个月内运行良好。今年的第一天,我在下面的代码行中遇到了问题。这行代码所做的只是在打开工作簿时将 activex 复选框控件设置为 true。

Sheets(WSCHARTS).chkAllJPM.value = True

我设法通过以前的帖子解决了这个问题。答案是关注the instructions。但是,第一天回到办公室的团队成员遇到了此工作簿的问题。同样,他们每天都在使用这本工作簿,没有任何问题。代码在上面的同一行调试,错误代码号为 32809。

我尝试按照为我解决问题的相同说明进行操作,但没有任何乐趣。我无法在我的计算机上复制这些问题。不确定是什么导致了这个错误?

这是子程序。请注意 WSCHARTS 是 public const string - 它的值是“charts”

Sub SetDefaultSetting()

' set the default view upon opening the spreadsheet

Dim ws As Worksheet
Dim wsTime As Worksheet
Set wsTime = ThisWorkbook.Sheets(WSTSJPM)
Set ws = ThisWorkbook.Sheets(WSCHARTS)

' get last date
Dim lRow As Long
lRow = wsTime.Range("A65536").End(xlUp).Row
ws.DropDowns("DropDownStart").ListFillRange = wsTime.Name & "!" & wsTime.Range("A2:A" & lRow).Address
ws.DropDowns("DropDownEnd").ListFillRange = wsTime.Name & "!" & wsTime.Range("A2:A" & lRow).Address

ws.Range(COLDATES & "1") = 1                      ' start date is 12 dec 2013
ws.Range(COLDATES & "2") = lRow - 1               ' latest avaiable date

' control are linked to cells so just need to change their cell values
ws.Range("C1") = 6
ws.Range("D1") = 7
ws.Range("E1") = 8
ws.Range("F1") = 9
ws.Range("G1") = 10

' rest should be blank
ws.Range("H1") = 1
ws.Range("I1") = 1
ws.Range("J1") = 1
ws.Range("K1") = 1
ws.Range("L1") = 1

Sheets(WSCHARTS).chkAllJPM.value = True
ws.OLEObjects("chkBOAML5").Object.Enabled = False

Set wsTime = Nothing
Set ws = Nothing

更新

所以我创建了一个新工作簿,并在 Sheet1 上放置了一个 activex 复选框控件并将其重命名为 chkTest。

我在下面添加了代码。该代码适用于我的电脑,但不适用于我同事的电脑。这现在相当令人沮丧。有任何想法吗?

 Private Sub Workbook_Open()

    Sheets("Sheet1").chkTest.Value = True

 End Sub

另一个更新

不确定这是否与我的问题有关。当我按照前面提到的说明进行操作时,我确实注意到我的 c:\users\username\Appdata\local\Temp\VBE 目录中有一个我的同事没有的额外文件。

我有一个 MsForms.exd 和 RefEdit.exd。我的同事只有 MsForms.exd 文件。这会导致任何问题吗?

希望是我的最后一次更新

因此,将上面更新中的代码直接更改为下面的代码现在在我们的两台计算机上都可以使用。有谁能够解释为什么或有什么区别?

Private Sub Workbook_Open()

Dim ws As Worksheet
Set ws = Sheets("Sheet1")
ws.OLEObjects("chkTest").Object.Value = False

End Sub

【问题讨论】:

  • 您提到错误代码 32809 与打开工作簿错误有关。检查您打开工作簿的位置。如果可能的话,发布你的整个代码块。需要更多信息。此外,如果它在一台计算机上运行而不是其他计算机,请检查您的文件/文件夹的可访问性。
  • 当工作簿打开时,它会调用一个子例程。单独运行该例程仍会在同一位置导致相同的错误。我们对文件和目录的权限相同
  • 执行 debug.print 并使用 F8 功能键运行您的代码。检查是否正确分配了每个变量/对象(即您为新工作簿设置的“wb”值确实包含正确的值)。最后要检查的是工作表是否被锁定。同样,需要更多代码
  • 我已经逐步完成了代码,所有值都符合预期,并且工作表未锁定。我已经发布了代码,但我认为代码不是问题
  • Excel 版本是否相同?安全设置是否相同? Excel选项->信任中心->信任中心设置->ActiveX设置->“启用所有控件”/安全模式等?

标签: excel vba


【解决方案1】:

只有一种解决方案可以 100% 工作(相信我,我一直在研究(可以说)所有可能的解决方案,在公司环境中):摆脱嵌入的 ActiveX 控件

你有三个选择,IMO:

  1. 选项 1 是将控件的功能移动到功能区中,可能会根据 ActiveX 控件添加用户窗体(当然,命令按钮不需要用户窗体)。这里有很多工作,但这是最干净、最安全的方式。

  2. 选项 2 是用表单控件替换 ActiveX 控件。这真的很糟糕,因为您将失去 ActiveX 控件为您提供的大部分功能,但它仍然是一种选择。

  3. 选项 3 是用 Shape 对象替换 ActiveX 控件;需要处理一些新的特定问题(例如,保护/锁定),但您会获得一系列精美的格式化选项:)

在任何情况下,您都需要返工/更新您的工作簿。我主要使用了选项 1,也少量使用了选项 3。请注意,您可以在同一个应用程序中混合使用上述选项。

【讨论】:

    【解决方案2】:

    在尝试了对我们不起作用的推荐 .exd 文件删除,并考虑在许多文件中重写 vb 代码后,我们最终通过卸载 MS KB 更新并不允许在后续更新中解决此问题。 (Office 2013 KB2726958;2010 KB2553154;2007 KB2596927)。 我们希望 MS 能够在未来的更新中找到一种优雅的方式来无缝解决 Active X 问题。

    【讨论】:

      【解决方案3】:

      Microsoft 于 2014 年 12 月发布了一个更新,该更新导致使用 ActiveX 控件的 Excel 应用程序出现错误。根据机器上的 Excel 版本应用修复。

      关闭所有 Office 应用程序

      对于 Excel 2007,安装 Microsoft 更新 KB2596927

      对于 Excel 2010,安装 Microsoft Update KB 2553154

      对于 Excel 2013,安装 Microsoft Update KB 2726958

      打开文件资源管理器

      在地址窗口中输入%Temp%

      点击 Excel 8.0 文件夹

      删除所有 *.exd 文件

      【讨论】:

        【解决方案4】:

        我的问题已经解决了,我从 %temp% 文件夹中删除了所有文件 一件重要的事情是用户帐户必须具有管理员权限 这解决了我的问题 大家好,希望对大家有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多