作者:肉斯情- | 来源:互联网 | 2023-05-27 21:40
我有一个excel 2013宏工作簿.
这本工作簿在过去的6个月里一直运行良好.今年的第一天,我在下面遇到了一个问题,下面的代码行.所有这一行代码都是在打开工作簿时将activex复选框控件设置为true.
Sheets(WSCHARTS).chkAllJPM.value = True
我设法通过之前的帖子解决问题.答案是按照说明进行的.但是,第一天回到办公室的团队成员遇到了这个工作簿的问题.他们每天都在使用这本工作簿而没有任何问题.代码在上面的同一行上进行调试,错误代码为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
UPDATE
所以我创建了一个新的工作簿,只需在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
小智..
5
只有一个解决方案100%工作(相信我,我一直在(可以说)所有可能的解决方案,在公司环境中):摆脱嵌入的ActiveX控件.
你有三个选择,IMO:
选项1是将控件的功能移动到功能区中,可能需要添加一个UserForm,具体取决于ActiveX控件(当然,命令按钮不需要UserForms).这里有相当多的工作,但它是最干净,最安全的方式.
选项2是使用表单控件替换ActiveX控件.这真的很糟糕,因为你将失去ActiveX控件给你的大部分功能,但它仍然是一个选项.
选项3是用Shape对象替换ActiveX控件; 一些新的具体问题需要处理(例如,保护/锁定),但你会得到一系列优美的格式选项:)
无论如何,您需要重新编写/更新工作簿.我主要使用选项1和选项3的一些.请注意,您可以在同一个应用程序中混合使用上述选项.
1> 小智..:
只有一个解决方案100%工作(相信我,我一直在(可以说)所有可能的解决方案,在公司环境中):摆脱嵌入的ActiveX控件.
你有三个选择,IMO:
选项1是将控件的功能移动到功能区中,可能需要添加一个UserForm,具体取决于ActiveX控件(当然,命令按钮不需要UserForms).这里有相当多的工作,但它是最干净,最安全的方式.
选项2是使用表单控件替换ActiveX控件.这真的很糟糕,因为你将失去ActiveX控件给你的大部分功能,但它仍然是一个选项.
选项3是用Shape对象替换ActiveX控件; 一些新的具体问题需要处理(例如,保护/锁定),但你会得到一系列优美的格式选项:)
无论如何,您需要重新编写/更新工作簿.我主要使用选项1和选项3的一些.请注意,您可以在同一个应用程序中混合使用上述选项.