在一台计算机上打开工作簿错误代码 32809,但在另一台计算机上打不开

opening workbook error code 32809 on one computer but not the other computer

我有一个 excel 2013 宏工作簿。

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

Sheets(WSCHARTS).chkAllJPM.value = True

我设法通过之前的 post 解决了这个问题。答案是跟随the instructions。但是,第一天回到办公室的一名团队成员对该工作簿有疑问。同样,他们每天都在使用这本工作簿,没有任何问题。代码在上面的同一行进行调试,错误代码编号为 32809。

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

这是子例程。请注意 WSCHARTS 是 public 常量字符串 - 它的值是 "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。

我添加了下面的代码。该代码适用于我的 PC,但不适用于我同事的计算机。现在这很令人沮丧。有任何想法吗?

 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

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

IMO,你有三个选择:

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

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

  3. 方案三是用Shape对象替换ActiveX控件;一些新的具体问题需要处理(例如,protection/locking),但你会得到一系列漂亮的格式选项:)

在任何情况下,您都需要 rework/update 您的工作簿。我主要使用选项 1,还有一点选项 3。请注意,您可以在同一应用中混合使用上述选项。

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

Microsoft 于 2014 年 12 月发布的更新导致 Excel 使用 ActiveX 控件的应用程序出错。根据计算机上 Excel 的版本应用修复程序。

关闭所有 Office 应用程序

对于 Excel 2007 安装 Microsoft Update KB2596927

对于 Excel 2010 安装 Microsoft Update KB 2553154

对于 Excel 2013 安装 Microsoft Update KB 2726958

打开文件资源管理器

在地址 Window

中输入 %Temp%

单击 Excel 8.0 文件夹

删除所有 *.exd 文件

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