我正在使用Excel,其中某些字段允许用户输入,其他单元格将受到保护.我使用过工具保护表,但是在执行此操作后,我无法更改VBA脚本中的值.我需要限制工作表以停止用户输入,同时允许VBA代码根据某些计算更改单元格值.
下面的代码片段更改了单元格的数据验证状态,并在Excel-2003工作表不受保护时运行.但是,当我保护工作表时,宏不会运行并引发运行时错误
运行时错误'-2147417848(80010108)':
对象'验证'的方法'添加'失败
我试过包装代码
Me.unprotect
...
Me.protect
Run Code Online (Sandbox Code Playgroud)
但这不能正常工作.那么,当工作表受到保护而没有上述运行时错误时,如何修改下面的代码才能工作(即让代码修改解锁单元格的验证)?
更新
我的原始工作簿是Excel 2003.我在Excel 2007中测试了@ eJames解决方案,其中包含Workbook_Open的以下定义
Sub WorkBook_Open()
Me.Worksheets("MainTable").Protect contents:=True, userinterfaceonly:=True
End Sub
Run Code Online (Sandbox Code Playgroud)
当工作表受到保护时,代码仍会失败并出现以下运行时错误
运行时错误'1004':应用程序定义的错误或对象定义的错误
谢谢,阿齐姆
代码片段
'cell to add drop down validation list'
dim myNamedRange as String
dim modifyCell as Range
modifyCell = ActiveCell.Offset(0,1)
' set list values based on some conditions not defined for brevitity'
If myCondition then
myNamedRange = "range1"
Else
myNamedRange = "range2"
End If
With modifyCell.Validation
.Delete
'Run time error occurs on the next line'
.Add Type:=xlValidateList, …Run Code Online (Sandbox Code Playgroud) 我有一个在VBA中开发的Excel插件,部署在网络上.
插件从Oracle数据库中读取,并在新工作表中粘贴表,该工作表还将包含一个用于刷新表的按钮(三角形).
一切都很好,但我必须用密码保护代码.
当我这样做时,某些机器上会出现以下错误:
隐藏模块中的编译错误:Main.当代码与此应用程序的版本,平台或体系结构不兼容时,通常会发生此错误.
虽然它在解锁时完美编译.
在其他机器上,它需要关闭VBA密码,即使我没有在关闭事件下定义的类型.
我希望保护我的代码,而不会遇到上述问题.任何建议表示赞赏.