我有一个excel 2013宏工作簿。
这本工作簿在过去的6个月里一直运作良好。今年的第一天,我在下面遇到了一个问题,下面的代码行。所有这一行代码都是在打开工作簿时将activex复选框控件设置为true。
Sheets(WSCHARTS).chkAllJPM.value = True
我设法通过之前的帖子解决问题。答案是遵循the instructions。但是,第一天回到办公室的团队成员遇到了这个工作簿的问题。他们每天都在使用这本工作簿而没有任何问题。代码在上面的同一行上进行调试,错误代码为32809。
我尝试按照相同的说明为我解决问题,但没有快乐。我不能在我的电脑上复制这些问题。不确定导致此错误的原因是什么?
这是子例程。请注意WSCHARTS是公共const字符串 - 它的值是“图表”
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
答案 0 :(得分:5)
只有一种解决方案可以100%运行(并且相信我,我在公司环境中一直在研究(可以说是)所有可能的解决方案): 摆脱嵌入式ActiveX控件 即可。
您有三个选项,IMO:
选项1是将控件的功能移动到功能区中,可能需要添加一个UserForm,具体取决于ActiveX控件(当然,命令按钮不需要UserForms)。这里有相当多的工作,但它是最干净,最安全的方式。
选项2是使用表单控件替换ActiveX控件。这真的很糟糕,因为你将失去ActiveX控件给你的大部分功能,但它仍然是一个选项。
选项3是用Shape对象替换ActiveX控件;一些新的具体问题需要处理(例如,保护/锁定),但你会得到一系列优美的格式化选项:)
在任何情况下,您都需要重新编写/更新工作簿。我主要使用选项1和选项3的一点。请注意,您可以在同一个应用程序中混合使用上述选项。
答案 1 :(得分:1)
尝试推荐的.exd文件删除对我们没有用,并考虑在多个文件中重写vb代码后,我们最终通过卸载MS KB更新解决了这个问题,并且不允许在后续更新中使用它。 (Office 2013 KB2726958; 2010 KB2553154; 2007 KB2596927)。 我们希望MS能够在未来的更新中找到一种优雅的方式来无缝地解决Active X问题。
答案 2 :(得分:0)
Micorsoft在2014年12月发布了一项更新,该更新导致使用ActiveX控件的Excel应用程序出错。根据计算机上的Excel版本应用修复程序。
关闭所有Office应用程序
对于Excel 2007,请安装Microsoft Update KB2596927
对于Excel 2010安装Microsoft Update KB 2553154
对于Excel 2013安装Microsoft Update KB 2726958
打开文件资源管理器
在地址窗口中输入%Temp%
单击Excel 8.0文件夹
删除所有* .exd文件
答案 3 :(得分:-1)
我的问题已经结束,我删除了%temp%文件夹中的所有文件 一件重要的事情是用户帐户必须具有管理员权限 这解决了我的问题 向所有人致以问候,我希望这对许多人有所帮助。